首先先对结构体排序,从小到大
然后只需要维护一个下标。每次更新下标的最小值
因为后面的数肯定都是大于前面的
所以只要看下标满足一个增长的即可
#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;
}