求助异或哈希
查看原帖
求助异或哈希
537046
大眼仔Happy楼主2024/4/28 21:02

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;
}
2024/4/28 21:02
加载中...