提交时间:2025-02-11 09:52:26
运行 ID: 36342
#include<bits/stdc++.h> using namespace std; const int N = 3e6+10; int n,q,x[N],Q[N][2],now,a[N]; struct T{ int ch[2]; int bz; }tri[N]; void insert(int y,int id){ int len=0; while(y){ a[++len]=y&1; y=y>>1; } for(int i=len;i>=len/2+1;i--){ swap(a[i],a[len-i+1]); } for(int i=len;i>=1;i--){ a[i+32-len]=a[i]; } for(int i=1;i<=32-len;i++){ a[i]=0; } int cur=0; for(int i=1;i<=32;i++){ if(tri[cur].ch[a[i]]==0){ now++; tri[cur].ch[a[i]]=now; cur=now; } else{ cur=tri[cur].ch[a[i]]; } } tri[cur].bz=id; } int find(int y){ int len=0; while(y){ a[++len]=y&1; y=y>>1; } for(int i=len;i>=len/2+1;i--){ swap(a[i],a[len-i+1]); } for(int i=len;i>=1;i--){ a[i+32-len]=a[i]; } for(int i=1;i<=32-len;i++){ a[i]=0; } int cur=0; int ans=0; for(int i=1;i<=now;i++){ if(tri[cur].ch[!a[i]]!=0){ cur=tri[cur].ch[!a[i]]; } else if(tri[cur].ch[a[i]]!=0){ cur=tri[cur].ch[a[i]]; } else{ ans=tri[cur].bz; break; } } return ans; } int find2(int y){ int len=0; while(y){ a[++len]=y&1; y=y>>1; } for(int i=len;i>=len/2+1;i--){ swap(a[i],a[len-i+1]); } for(int i=len;i>=1;i--){ a[i+32-len]=a[i]; } for(int i=1;i<=32-len;i++){ a[i]=0; } int cur=0; int ans=0; for(int i=1;i<=now;i++){ if(tri[cur].ch[a[i]]!=0){ cur=tri[cur].ch[a[i]]; } else if(tri[cur].ch[!a[i]]!=0){ cur=tri[cur].ch[!a[i]]; } else{ ans=tri[cur].bz; break; } } return ans; } int main(){ //freopen("function.in","r",stdin); //freopen("function.out","w",stdout); cin>>n>>q; for(int i=1;i<=n;i++){ cin>>x[i]; insert(x[i],i); } for(int i=1;i<=q;i++){ int ans=0; cin>>Q[i][0]>>Q[i][1]; int maxn=find(Q[i][0]),minn=find2(Q[i][0]); int tmp=(x[maxn]^Q[i][0])-Q[i][1],tmp2=(x[minn]^Q[i][0])-Q[i][1]; if(tmp*tmp2>0){ cout<<-1<<endl; continue; } if(n==1){ cout<<-1<<endl; continue; } int L,R,mid; if(maxn<minn){ L=maxn; R=minn; } else{ L=minn; R=maxn; } while(L<=R){ mid=(L+R+1)/2; tmp=(x[mid]^Q[i][0])-Q[i][1]; int tmp2=(x[mid+1]^Q[i][0])-Q[i][1]; if(tmp*tmp2<=0&&mid<n){ ans=mid; break; } if(tmp<=0){ L=mid; } else{ R=mid; } if(L+1==R){ ans=L; break; } } cout<<ans<<endl; } return 0; }