Submission #520134

#TimeUsernameProblemLanguageResultExecution timeMemory
520134A_DArranging Shoes (IOI19_shoes)C++14
100 / 100
237 ms275132 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; const int NN=2e5+100; int bit[2*NN]; bool vis[NN]; deque<int> l[NN]; deque<int> r[NN]; vector<int> a; void add(int idx,int val) { while(idx<NN){ bit[idx]+=val; idx+=(idx)&(-idx); } } long long get(int idx) { long long ret=0; while(idx>0){ ret+=bit[idx]; idx-=idx&(-idx); } return ret; } long long count_swaps(vector<int> s){ long long ans=0; int nn=s.size(); a.push_back(0); for(int i=0;i<nn;i++){ a.push_back(s[i]); } for(int i=1;i<=nn;i++){ add(i,1); if(a[i]>0){ r[a[i]].push_back(i); } else{ l[-a[i]].push_back(i); } } for(int i=1;i<=nn;i++){ if(vis[i])continue; vis[i]=1; int u=abs(a[i]); if(a[i]>0){ if(r[u].empty())return 0; r[u].pop_front(); ans+=get(l[u].front())-get(i); vis[l[u].front()]=1; add(l[u].front(),-1); if(l[u].empty())return 0; l[u].pop_front(); } else{ if(l[u].empty())return 0; l[u].pop_front(); ans+=get(r[u].front())-get(i)-1; add(r[u].front(),-1); vis[r[u].front()]=1; if(r[u].empty())return 0; r[u].pop_front(); } // cout<<ans<<"\n"; // for(int j=1;j<=n;j++)cout<<vis[j]<<" ";cout<<endl; } // cout<<endl; return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...