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;
    }

    我身后空无一人,我怎敢倒下
  • 相关阅读:
    go 异常处理
    win10一行代码搭建本地html项目
    github搭建html网站到外网
    python生成动态个性二维码
    python+selenium通过加载用户配置实现免登陆
    python搭建本地共享文件服务器
    python画猫并打包成EXE文件
    python批量爬取猫咪图片
    解决-Chrome插件安装时程序包无效:"CRX_HEADER_INVALID"的错误
    移动自动化测试框架--openatx
  • 原文地址:https://www.cnblogs.com/DreamKill/p/8784634.html
Copyright © 2011-2022 走看看