51Nod 1272(思维题)

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

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

然后从小到大更新最大值

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

#include 
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;iscanf("%d",&a[i].first);
        a[i].second=i;
    }
    sort(a,a+n);
    int minpos=a[0].second,ans=0;
    for(int i=1;iif(a[i].second>minpos)ans=max(ans,a[i].second-minpos);
        else minpos=a[i].second;
    }
    printf("%d\n",ans);
    return 0;
}



你可能感兴趣的:(贪心)