Submission #640491

#TimeUsernameProblemLanguageResultExecution timeMemory
640491Urvuk3Xor Sort (eJOI20_xorsort)C++17
25 / 100
6 ms984 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; bool subtask1=(2<=N && N<=150 && S==1); bool subtask2=(2<=N && N<=200 && S==1); bool subtask3=(2<=N && N<=1000 && S==2); vector<int> a(N+1); for(int i=1;i<=N;i++) cin>>a[i]; vector<pii> opers; function<void(int,int)> Oper=[&](int i,int j){ if(abs(i-j)==1) a[i]=a[i]^a[j]; opers.pb({i,j}); }; function<bool(int,int)> Has=[&](int x,int bit){ return (x&(1<<bit))>0; }; if(subtask1){ for(int i=1;i<=N;i++){ for(int j=1;j<=N-1;j++){ if(a[j]>a[j+1]){ Oper(j,j+1); Oper(j+1,j); Oper(j,j+1); } } } } else if(subtask2){ } else if(subtask3){ set<int> s; 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; for(int bit=20;bit>=0;bit--){ s.clear(); bool pomeren=false; for(int i=L;i<=R;i++){ if(Has(a[i],bit)){ s.insert(i); pomeren=true; } } 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); } } if(pomeren) ++L; } } cout<<sz(opers)<<endl; for(auto p:opers) cout<<p.fi<<" "<<p.se<<endl; PRINTvec(a); } 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...