1. 程式人生 > >51Nod 1272 最大距離 (排序,維護下標)

51Nod 1272 最大距離 (排序,維護下標)

首先先對結構體排序,從小到大

然後只需要維護一個下標。每次更新下標的最小值

因為後面的數肯定都是大於前面的

所以只要看下標滿足一個增長的即可

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