51Nod 1272 最大距離 (排序,維護下標)
阿新 • • 發佈:2019-02-09
首先先對結構體排序,從小到大
然後只需要維護一個下標。每次更新下標的最小值
因為後面的數肯定都是大於前面的
所以只要看下標滿足一個增長的即可
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<set> using namespace std; typedef struct node{ int index,num; }node; bool cmp(node n1,node n2){ if(n1.num==n2.num) return n1.index<n2.index; return n1.num<n2.num; } int main(){ int n; node no[50000+10]; cin>>n; for(int i=0;i<n;i++){ scanf("%d",&no[i].num); no[i].index=i; } sort(no,no+n,cmp); int out=0; int index=no[0].index; for(int i=1;i<n;i++){ if(no[i].index<index){ index=no[i].index; } else out=max(out,no[i].index-index); } cout<<out<<endl; return 0; }