P8773 题解
Surge_of_Force · · 题解
注意到
对于每一个
预处理出这个后,不难发现对于区间
int n,m,x,t[(1ll<<20)+1],ans[MAX],lg[MAX],st[MAX][20];
int ask(int l,int r){
int len=lg[r-l+1];
return max(st[l][len],st[r-(1ll<<len)+1][len]);
}
signed main(){
n=read(),m=read(),x=read();
for(int i=1;i<=n;i++){
int xx=read();
ans[i]=t[xx^x];
t[xx]=i;
}
for(int i=1;i<=n;i++) st[i][0]=ans[i];
lg[0]=-1;
for(int i=1;i<=n;i++) lg[i]=lg[i>>1]+1;
for(int i=1;i<=20;i++)
for(int j=1;j+(1ll<<i)-1<=n;j++)
st[j][i]=max(st[j][i-1],st[j+(1ll<<(i-1))][i-1]);
while(m--){
int l=read(),r=read();
if(ask(l,r)>=l) puts("yes");
else puts("no");
}
return 0;
}