51Nod 1272(思维题)

来源:互联网 发布:linux 随机启动脚本 编辑:程序博客网 时间:2024/06/05 11:10

要在一个数列里面找一个数,与他后面比他大的数的距离最大。

记录每个数字的位置后按照数字大小排序。

然后从小到大更新最大值

提示要用单调栈,可是想了半天也不会。。。。

#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>pii;const int N=1e6+9;pii a[N];int main(){    //freopen("in.txt","r",stdin);    int n,cnt=0;    scanf("%d",&n);    for(int i=0;i<n;i++){        scanf("%d",&a[i].first);        a[i].second=i;    }    sort(a,a+n);    int minpos=a[0].second,ans=0;    for(int i=1;i<n;i++){        if(a[i].second>minpos)ans=max(ans,a[i].second-minpos);        else minpos=a[i].second;    }    printf("%d\n",ans);    return 0;}



原创粉丝点击