Submission #640459

#TimeUsernameProblemLanguageResultExecution timeMemory
640459Urvuk3Xor Sort (eJOI20_xorsort)C++17
0 / 100
1 ms212 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int INF=1e9; const ll LINF=1e18; #define fi first #define se second #define pii pair<int,int> #define mid ((l+r)/2) #define sz(a) (int((a).size())) #define all(a) a.begin(),a.end() #define endl "\n" #define PRINT(x) cerr<<#x<<'='<<x<<endl; #define pb push_back #define PRINTvec(niz) { cerr<<#niz<<"="; for(auto _i:niz) cerr<<_i<<" "; cerr<<endl; } void Solve(){ int N,S; cin>>N>>S; vector<int> a(N+1); for(int i=1;i<=N;i++) cin>>a[i]; function<void(int,int)> Oper=[&](int i,int j){ cout<<i<<" "<<j<<endl; a[i]=a[i]^a[j]; }; set<int> s; function<bool(int,int)> Has=[&](int x,int bit){ return (x&(1<<bit))>0; }; function<void(int,int,int)> Update=[&](int i,int j,int bit){ if(!Has(a[i],bit) && s.count(i)) s.erase(i); if(!Has(a[j],bit) && s.count(j)) s.erase(j); if(Has(a[i],bit)) s.insert(i); if(Has(a[j],bit)) s.insert(j); }; int L=1,R=N; if(S==2){ for(int bit=20;bit>=0;bit--){ s.clear(); for(int i=L;i<=R;i++){ if(Has(a[i],bit)){ s.insert(i); } } while(!s.empty() && !(sz(s)==1 && s.count(L))){ int i=*(prev(s.end())); if(Has(a[i-1],bit)){ Oper(i,i-1); Update(i-1,i,bit); } else{ Oper(i-1,i); Update(i-1,i,bit); Oper(i,i-1); Update(i-1,i,bit); } } ++L; } } else{ for(int bit=3;bit>=0;bit--){ s.clear(); for(int i=L;i<=R;i++){ if(Has(a[i],bit)){ s.insert(i); } } while(!s.empty() && !(sz(s)==1 && s.count(R))){ int i=*(s.begin()); if(Has(a[i+1],bit)){ Oper(i,i+1); Update(i,i+1,bit); } else{ Oper(i+1,i); Update(i,i+1,bit); Oper(i,i+1); Update(i,i+1,bit); } } --R; } } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t; //cin>>t; t=1; while(t--){ Solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...