Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
36240 22级廖思学 【S】T1 C++ 通过 100 3891 MS 912752 KB 1685 2025-02-10 15:53:24

Tests(12/12):


#include<bits/stdc++.h> using namespace std; #define int long long const int N=1e6+10; int n,Q,x[N],a,cta,b; int son[N*30][5],cnt,pl[N*30]; void add(int id){ // cout<<"!!"<<id<<endl; int p=0,v; for(int i=30;i>=0;i--){ v=(x[id]>>i)&1; // cout<<x[id]<<" "<<(1<<i)<<" "<<v<<" "<<p<<" "; if(!son[p][v]){son[p][v]=++cnt;}//cout<<son[p][v]<<endl; p=son[p][v]; }//cout<<endl; // cout<<"!"<<id<<" "<<p<<endl; pl[p]=id; } int find_mx(){ // cout<<"!"<<endl; int p=0,v; for(int i=30;i>=0;i--){ v=(a>>i)&1;//cout<<a<<" "<<" "<<(1<<i)<<" "<<v<<" "<<(!v)<<" "; if(son[p][(!v)]){p=son[p][(!v)];} else p=son[p][v]; // cout<<p<<endl; }//cout<<endl; return pl[p]; } int find_mn(){ int p=0,v; for(int i=30;i>=0;i--){ v=(a>>i)&1; if(son[p][v]){p=son[p][v];} else p=son[p][!v]; } return pl[p]; } int f(int x){return (x^a)-b;} signed main(){ scanf("%lld%lld",&n,&Q); for(int i=1;i<=n;i++){ scanf("%lld",&x[i]); add(i); } // for(int i=0;i<=40;i++){cout<<son[i][0]<<" "<<son[i][1]<<endl;} while(Q--){ scanf("%lld%lld",&a,&b); if(n==1){printf("-1\n");continue;} int mx=find_mx(),mn=find_mn();//cout<<mx<<" "<<mn<<endl; if(mx>mn)swap(mx,mn); // cout<<f(x[mx])<<" "<<f(x[mn])<<endl; if(f(x[mx])*f(x[mn])>0){printf("-1\n");continue;} while(mn-mx>1){ int mid=(mx+mn)>>1; if(f(x[mid])*f(x[mx])<=0)mn=mid; else mx=mid; } printf("%lld\n",mx); } return 0; }


测评信息: