HDU - 5172

题目链接:HDU - 5172


对每个排列集合哈希即可。


AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include
#define int long long
using namespace std;
const int N=1e6+10,mod=1e18;
mt19937 rnd(time(0));
int n,m,a[N],h[N],sum[N],p[N];
void solve(){
     
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]),sum[i]=sum[i-1]^h[a[i]];
	for(int i=1,l,r;i<=m;i++) 
		scanf("%lld %lld",&l,&r),puts(p[r-l+1]==(sum[r]^sum[l-1])?"YES":"NO");
}
signed main(){
     
	for(int i=1;i<=1000000;i++) h[i]=rnd()%mod+131,p[i]=p[i-1]^h[i];
	while(cin>>n>>m) solve();
	return 0;
}

你可能感兴趣的:(HDU,Hash)