最大距离
解题思路
把尽量前的数字和后面的数字匹配是最优的,排序后用单调栈维护当前点可以到的最远距离。
code
#include<algorithm>
#include<iostream>
#include<cstdio>
#define fst first
#define scd second
using namespace std;
int n,m,ans;
int b[100010],top;
pair<int,int> a[100010];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i].fst),a[i].scd=i;
sort(a+1,a+n+1);
for(int i=n;i;i--)
{
while(top&&a[b[top]].scd<a[i].scd) top--;
ans=max(ans,a[b[1]].scd-a[i].scd);
b[++top]=i;
}
printf("%d\n",ans);
}