zoukankan      html  css  js  c++  java
  • 51nod 1272 最大距离贪心/单调栈

              (1)题目大大意就是寻找一个(arr[i],arr[j]),(j>i&&arr[j]>arr[i])求(j-i)的最大值

              (2)贪心思路,见代码1

              (3)思路1维护一个单调递减的栈,如果发现此时的arr[i]小于此时栈顶元素,或者栈为空那么进,else(不二分最后一组数据会超时,)二分查找栈(数组模拟)中的第一个比此时元素小的下标更新ans.

            (1)代码

    #include <algorithm>
    #include <stdio.h>
    #include <stack>
    #include <istream>
    #include <map>
    #include <math.h>
    #include <iostream>
    #include <queue>
    #include <string.h>
    #include <set>
    #include <cstdio>
    #define MAX 2005
    using namespace std;
    const int maxn = 10000007;

    struct arr {
    int val;
    int id;
    }inof[maxn];
    bool cmp(arr a, arr b) {
    if (a.val != b.val)return a.val>b.val;
    return a.id > b.id;

    }
    int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
    scanf("%d", &inof[i].val);
    inof[i].id = i;
    }
    int ans = 0,ec = -9999;
    sort(inof, inof + n,cmp);
    for (int i = 0; i < n; i++) {
    if (inof[i].id > ec)ec = inof[i].id;
    else if(ec>inof[i].id)ans = max(ans, ec - inof[i].id);
    //printf("%d **** %d ",ec,inof[i].id);
    }
    cout << ans << endl;
    return 0;
    }

    (2)代码

    include <stdio.h>
    #include <algorithm>
    using namespace std;

    int b[50000],a[50000];
    int n,q;
    int findpos(int val) //找到小于等于val的数的最小下标
    {
    int lo = 0, hi = q - 1, mid;
    while (lo < hi)
    {
    mid = (hi+lo)/2;
    if (a[b[mid]] < val)
    hi = mid;
    else if (a[b[mid]] > val)
    lo = mid + 1;
    else
    return b[mid];
    }
    return b[lo];
    }
    int main() {
    int i, pos, ans = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    scanf("%d", &a[i]);
    for (i = 0; i < n; i++)
    {
    if (0 == q || a[b[q-1]] > a[i]) //单调减
    b[q++] = i;
    else {
    pos = findpos(a[i]);
    ans = max(ans, i - pos);
    }
    }
    printf("%d ", ans);
    return 0;
    }

    我身后空无一人,我怎敢倒下
  • 相关阅读:
    最短路径-Dijkstra算法(转载)
    递归算法到非递归算法的转换
    向量点乘(内积)和叉乘(外积、向量积)概念及几何意义(转载)
    数据预处理之独热编码(One-Hot Encoding)(转载)
    MyEclipse中手工添加dtd支持
    怎样sublime显示文件夹
    sublime_Text3中snippet设置信息头(包括作者、日期)
    解决Sublime_Text不能安装插件的方法
    Python设置默认编码为UTF-8
    解决火狐启动缓慢的方法
  • 原文地址:https://www.cnblogs.com/DreamKill/p/8784634.html
Copyright © 2011-2022 走看看