Submission #520128

#TimeUsernameProblemLanguageResultExecution timeMemory
520128A_DArranging Shoes (IOI19_shoes)C++14
0 / 100
454 ms1048580 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; const int NN=1e6+100; int bit[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 n=s.size(); vector<bool> vis(n+1); a.push_back(0); for(int i=0;i<n;i++){ a.push_back(s[i]); } for(int i=1;i<=n;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<=n;i++){ if(vis[i])continue; vis[i]=1; int u=abs(a[i]); if(a[i]>0){ r[u].pop_front(); ans+=get(l[u].front())-get(i); vis[l[u].front()]=1; add(l[u].front(),-1); l[u].pop_front(); } else{ l[u].pop_front(); ans+=get(r[u].front())-get(i)-1; add(r[u].front(),-1); vis[r[u].front()]=1; 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...