pair<int,int>partition(vector<int>&a,intpivot){intl=0,r=int(a.size())-1;while(l<=r){while(l<=r&&a[l]<pivot)l++;while(l<=r&&a[r]>pivot)r--;if(l<r){// It can be done at most n/2 times,// so there are at most n/2 pivots on either side.swap(a[l++],a[r--]);}elseif(l==r){// a[l] == pivotreturn{l,l+1};}}assert(l==r+1);return{l,l};}
defpartition(a,pivot):l,r=0,len(a)-1whilel<=r:whilel<=randa[l]<pivot:l+=1whilel<=randa[r]>pivot:r-=1ifl<r:# It can be done at most n/2 times,# so there are at most n/2 pivots on either side.a[l],a[r]=a[r],a[l]l,r=l+1,r-1elifl==r:# a[l] == pivotreturn(l,l+1)assertl==r+1return(l,l)
#include<bits/stdc++.h>usingnamespacestd;pair<int,int>partition(vector<int>&a,intpivot){intl=0,n=int(a.size());for(inti=0;i<n;i++)if(a[i]<pivot)swap(a[i],a[l++]);intr=l;for(inti=0;i<n;i++)if(a[i]==pivot)swap(a[i],a[r++]);return{l,r};}// use precise time as random seedconstintRANDOM_SEED=chrono::system_clock::now().time_since_epoch().count();mt19937rng(RANDOM_SEED);// random number generatorintrandint(intl,intr){// rand in [l, r]returnint(rng()%(r-l+1)+l);}intkth(vector<int>a,intk){intn=a.size();auto[l,r]=partition(a,a[randint(0,n-1)]);if(k<l)returnkth(vector<int>(a.begin(),a.begin()+l),k);if(k>=r)returnkth(vector<int>(a.begin()+r,a.end()),k-r);returna[k];}intn,k;vector<int>a;voidread_input_data_vector(){intm;cin>>n>>k>>m;a.resize(n);for(inti=0;i<m;i++){cin>>a[i];}unsignedintz=a[m-1];for(inti=m;i<n;i++){z^=z<<13;z^=z>>17;z^=z<<5;a[i]=z&0x7fffffff;}}intmain(){read_input_data_vector();cout<<kth(a,k-1)<<endl;}
#include<bits/stdc++.h>usingnamespacestd;pair<int,int>partition(vector<int>&a,intL,intR,intpivot){intl=L,r=R-1;while(l<=r){while(l<=r&&a[l]<pivot)l++;while(l<=r&&a[r]>pivot)r--;if(l<r){// It can be done at most n/2 times,// so there are at most n/2 pivots on either side.swap(a[l++],a[r--]);}elseif(l==r){// a[l] == pivotreturn{l,l+1};}}assert(l==r+1);return{l,l};}// use precise time as random seedconstintRANDOM_SEED=chrono::system_clock::now().time_since_epoch().count();mt19937rng(RANDOM_SEED);// random number generatorintrandint(intl,intr){// rand in [l, r]returnint(rng()%(r-l+1)+l);}intkth(vector<int>&a,intL,intR,intk){auto[l,r]=partition(a,L,R,a[randint(L,R-1)]);if(k<l)returnkth(a,L,l,k);if(k>=r)returnkth(a,r,R,k);returna[k];}intn,k;vector<int>a;voidread_input_data_vector(){intm;cin>>n>>k>>m;a.resize(n);for(inti=0;i<m;i++){cin>>a[i];}unsignedintz=a[m-1];for(inti=m;i<n;i++){z^=z<<13;z^=z>>17;z^=z<<5;a[i]=z&0x7fffffff;}}intmain(){read_input_data_vector();cout<<kth(a,0,n,k-1)<<endl;}
#include<bits/stdc++.h>usingnamespacestd;pair<int,int>partition(vector<int>&a,intL,intR,intpivot){intl=L,r=R-1;while(l<=r){while(l<=r&&a[l]<pivot)l++;while(l<=r&&a[r]>pivot)r--;if(l<r){// It can be done at most n/2 times,// so there are at most n/2 pivots on either side.swap(a[l++],a[r--]);}elseif(l==r){// a[l] == pivotreturn{l,l+1};}}assert(l==r+1);return{l,l};}intkth(vector<int>&a,intL,intR,intk){if(R-L<=10){sort(a.begin()+L,a.begin()+R);returna[k];}intp=L;for(inti=L;i<R;i+=5){intj=min(i+5,R);sort(a.begin()+i,a.begin()+j);swap(a[p++],a[(i+j)/2]);}intpivot=kth(a,L,p,(L+p)/2);auto[l,r]=partition(a,L,R,pivot);if(k<l)returnkth(a,L,l,k);if(k>=r)returnkth(a,r,R,k);returna[k];}intn,k;vector<int>a;voidread_input_data_vector(){intm;cin>>n>>k>>m;a.resize(n);for(inti=0;i<m;i++){cin>>a[i];}unsignedintz=a[m-1];for(inti=m;i<n;i++){z^=z<<13;z^=z>>17;z^=z<<5;a[i]=z&0x7fffffff;}}intmain(){read_input_data_vector();cout<<kth(a,0,n,k-1)<<endl;}
#include<bits/stdc++.h>usingnamespacestd;intquery(intx,inty);voidsolve(vector<int>&a){if(a.size()<=1)return;vector<int>left(a.begin(),a.begin()+a.size()/2);vector<int>right(a.begin()+a.size()/2,a.end());solve(left);solve(right);autocmp=[&](autoi,autoj){if(i==left.size())returnfalse;if(j==right.size())returntrue;returnquery(left[i],right[j])==-1;// x < y};for(size_ti=0,j=0,k=0;k<a.size();k++){if(cmp(i,j)){a[k]=left[i++];}else{a[k]=right[j++];}}}voidoptimal_sort(intn){vector<int>a(n);for(inti=0;i<n;i++)a[i]=i+1;solve(a);for(inti=0;i<n;i++)cout<<a[i]<<" \n"[i==n-1];}
#include<bits/stdc++.h>usingnamespacestd;constint64_tINF=1e18;int64_tpow_2(int64_tx){returnx*x;}structpoint{intx,y;point(int_x,int_y):x(_x),y(_y){}int64_tdistance_2(constpoint&other)const{returnpow_2(x-other.x)+pow_2(y-other.y);}};// Inputs: A vector of points sorted by x-coordinate.// Return: The minimum squared distance between any two points,// and points are (merge-)sorted by y-coordinate on the way.int64_tsolve(vector<point>&a){if(a.size()<2)returnINF;vector<point>left(a.begin(),a.begin()+a.size()/2),right(a.begin()+a.size()/2,a.end());intmid_x=a[a.size()/2].x;// Important: a[] will be modifiedint64_td=min(solve(left),solve(right));merge(left.begin(),left.end(),right.begin(),right.end(),a.begin(),[](autou,auto&v){returnu.y<v.y;});vector<point>strip;for(auto&p:a){if(pow_2(p.x-mid_x)<d){strip.push_back(p);}}for(inti=0;i<strip.size();i++){for(intj=i+1;j<strip.size();j++){if(pow_2(strip[j].y-strip[i].y)>=d)break;d=min(d,strip[i].distance_2(strip[j]));}}returnd;}intmain(){intn;cin>>n;vector<point>a;for(inti=0;i<n;i++){intx,y;cin>>x>>y;a.push_back(point(x,y));}sort(a.begin(),a.end(),[](auto&u,auto&v){returnu.x<v.x;});cout<<solve(a)<<endl;}
#include<bits/stdc++.h>usingnamespacestd;optional<vector<int>>solve(vector<int>a){if(a.size()<=1){if(a.size()==1&&a[0]==0)returnvector<int>();elsereturnnullopt;}intx=a[1]-a[0];vector<int>left,right;size_tj=0;for(size_ti=0;i<a.size();i++){if(j<right.size()&&a[i]==right[j]){j++;}else{left.push_back(a[i]);right.push_back(a[i]+x);}}if(j==right.size()){// all elements matchedif(count(left.begin(),left.end(),0)){if(autoret=solve(left)){ret->push_back(x);returnret;}}elseif(count(right.begin(),right.end(),0)){if(autoret=solve(right)){ret->push_back(-x);returnret;}}}returnnullopt;}intmain(){intn;cin>>n;vector<int>a(1<<n);for(inti=1;i<(1<<n);i++)cin>>a[i];sort(a.begin(),a.end());if(autoret=solve(a)){cout<<"YES\n";for(inti=0;i<n;i++)cout<<(*ret)[i]<<" \n"[i==n-1];}else{cout<<"NO\n";}}
defsolve(a):iflen(a)<=1:iflen(a)==1anda[0]==0:return[]else:returnNonex=a[1]-a[0]left,right=[],[]j=0foriinrange(len(a)):ifj<len(right)anda[i]==right[j]:j+=1else:left.append(a[i])right.append(a[i]+x)ifj==len(right):# all elements matchedifleft.count(0):ret=solve(left)ifretisnotNone:ret.append(x)returnretelifright.count(0):ret=solve(right)ifretisnotNone:ret.append(-x)returnretreturnNonen=int(input())a=[0]+list(map(int,input().split()))a.sort()ifret:=solve(a):print("YES")print(*ret)else:print("NO")