Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
36312 23级徐泽厚 【S】T1 C++ 运行出错 41 2436 MS 113036 KB 2419 2025-02-10 20:33:16

Tests(5/12):


#include <bits/stdc++.h> #define int long long using namespace std; struct node{ int z,wz; }; map<int,int> mp; int n,q,x[1000005],a,b,t[3000005][2],jl[300005],tot=0; void insert(int y,int z){ int p=0; for (int i=30;i>=0;i--){ bool c=y&(1<<i); if (!t[p][c]){ t[p][c]=++tot; } p=t[p][c]; } jl[p]=z; return ; } node findmin(int y){ int p=0,ret=0; for (int i=30;i>=0;i--){ bool c=y&(1<<i); if (t[p][c]){ p=t[p][c]; } else{ p=t[p][1-c]; ret+=1<<i; } } return {ret,jl[p]}; } node findmax(int y){ int p=0,ret=0; for (int i=30;i>=0;i--){ bool c=y&(1<<i); if (t[p][1-c]){ p=t[p][1-c]; ret+=1<<i; } else{ p=t[p][c]; } } return {ret,jl[p]}; } int find(int l,int r){ int mid,ret; if (l<r){ while (l<=r){ mid=(l+r)/2; if ((x[mid]^a)>b){ ret=mid; r=mid-1; } else l=mid+1; } return ret-1; } else{ swap(l,r); while (l<=r){ mid=(l+r)/2; if ((x[mid]^a)>b){ ret=mid; l=mid+1; } else r=mid-1; } return ret; } } signed main(){ cin>>n>>q; for (int i=1;i<=n;i++){ cin>>x[i]; insert(x[i],i); mp[x[i]]=i; } while (q--){ cin>>a>>b; if (n==1){ cout<<-1<<endl; } else if (mp[a^b]){ if (mp[a^b]==n){ cout<<n-1<<endl; } else{ cout<<mp[a^b]<<endl; } } else if(n<=1000 and q<=1000){ int ans=-1; for (int i=1;i<=n-1;i++){ if (((x[i]^a)-b)*((x[i+1]^a)-b)<=0){ ans=i; break; } } cout<<ans<<endl; } else{ node u=findmin(a),v=findmax(a); if (u.z>b or v.z<b){ cout<<-1<<endl; } else{ cout<<find(u.wz,v.wz)<<endl; } } } return 0; }


测评信息: