WA求调
查看原帖
WA求调
763878
Jerry_heng楼主2024/5/10 21:27

太菜了qwq

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mxn=3e5+10;
int T,a[mxn],s[mxn],pos[mxn],cnt,n,q;
map<int,int>mp;
vector<int>v[mxn];
bool pd
signed main(){
	scanf("%lld",&T);
	while(T--){
		for(int i=1;i<=cnt;i++)v[i].clear();
		mp.clear();
		cnt=0;
		scanf("%lld%lld",&n,&q);
		for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
		for(int i=1;i<=n;i++){
			s[i]=s[i-1]^a[i];
			if(!mp[s[i]])mp[s[i]]=++cnt;
			v[mp[s[i]]].push_back(i);
			pos[i]=v[mp[s[i]]].size();
		}
		while(q--){
			int l,r;
			scanf("%lld%lld",&l,&r);
			if(s[r]==s[l-1])puts("YES");
			else if(pos[r]>1){
				int val=mp[s[r]];
				int L=0,R=v[val].size()-1,ans;
				while(L<=R){
					int mid=(L+R)>>1;
					if(v[val][mid]>=l)ans=mid,R=mid-1;
					else L=mid+1;
				}
				int p=v[val][ans];
				if(r-p>1ll){
					if(!mp[0]){
						puts("NO");
						continue;
					}
					int va=mp[0];
					if(lower_bound(v[va].begin(),v[va].end(),p)==v[va].end()){
						puts("NO");
						continue;
					}
					int pp=v[va][lower_bound(v[va].begin(),v[va].end(),p)-v[va].begin()];
					if(pp<r)puts("YES");
					else puts("NO");
				}
				else puts("NO");
			}
			else puts("NO");
		}
		puts("");
	}
	return 0;
}
2024/5/10 21:27
加载中...