#pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define Inf 0x3FFFFFFFFFFFFFFFLL #define eps 1e-6 #define pi acos(-1.0) using namespace std; typedef long long ll; const int maxn=100000+10; const int Msize=61; int ch[maxn*Msize][2],size[maxn*Msize],tot; ll val[maxn*Msize],p[Msize]; void Init() { ch[0][0]=ch[0][1]=0; tot=size[0]=0; val[0]=-1; } void Insert(ll x) { int u=0; for(int i=Msize-1;i>=0;--i) { int c=(x&p[i])>0; if(!ch[u][c]) { ch[u][c]=++tot; ch[tot][0]=ch[tot][1]=0; size[tot]=0;val[tot]=-1; } u=ch[u][c]; size[u]++; } val[u]=x; } struct Edge { int v; ll w; int next; Edge(int v=0,ll w=0,int next=0):v(v),w(w),next(next){} }edges[maxn<<1]; struct Query { int id,k; bool operator <(const Query &a) const { return k=n) return false; int kk=k,u=0; for(int dep=Msize-1;dep>=0;--dep) { int c=((num&p[dep])>0)^1; int v=ch[u][c]; if(v&&size[v]>=kk) u=ch[u][c]; else if(v&&size[v]q; Node node; for(int i=1;i<=n;++i) { node.k=0; node.num=xv[i]; if(node.next()) q.push(node); } memset(ans,0xff,sizeof(ans)); int rank=0; ll tmp; for(int i=0;i