rt,是我写挂了这题还是算法本身的局限性。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+5;
mt19937 rnd(time(0));
ll inline read()
{
ll num=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){num=(num<<3)+(num<<1)+(ch^48);ch=getchar();}
return num*f;
}
ll n,a[N],sumA[N],w[N],sumW[N],ans=1;
void solve()
{
ll mx=1;
for(int i=1;i<=n;i++)
{
sumA[i]=sumA[i-1]^w[a[i]];
if(a[i]==1)mx=1;
else
{
mx=max(mx,a[i]);
if(i<mx)continue;
if((sumA[i]^sumA[i-mx])==sumW[mx])ans=max(ans,mx);
}
}
}
int main(){
n=read();
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<=n;i++)w[i]=rnd(),sumW[i]=sumW[i-1]^w[i];
solve();reverse(a+1,a+1+n);solve();
printf("%lld",ans);
return 0;
}