Submission #1288210

#TimeUsernameProblemLanguageResultExecution timeMemory
1288210m.zeeshanrashidArranging Shoes (IOI19_shoes)C++20
100 / 100
314 ms25464 KiB
#include "shoes.h" #include "bits/stdc++.h" using namespace std; #define ll long long struct fentree{ vector<int>fen; int s; void init(int n){ fen.resize(n+1,0); s=n; } void edit(int i,int x){ while(i<=s){ fen[i]+=x; i+=(i&-i); } } int sum(int r){ int ans=0; while(r>0){ ans+=fen[r]; r-=(r&-r); } return ans; } }; ll count_swaps(vector<int> a) { int n=a.size()/2; a.insert(begin(a),0); ll ans=0; map<int,int>d; vector<int>co(2*n+1,0); map<int,vector<int>>ind; for(int i=1;i<=2*n;i++) ind[a[i]].push_back(i); for(int i=1;i<=2*n;i++){ if(ind[a[i]].back()>ind[a[i]][0]){ sort(rbegin(ind[a[i]]),rend(ind[a[i]])); } } fentree fen; fen.init(2*n); for(int i=1;i<=2*n;i++) fen.edit(i,1); for(int i=1;i<=2*n;i++){ int x=a[i],y=-a[i]; if(co[i]) continue; if(ind[x].size()==0 or ind[y].size()==0){ cout<<i<<" 1234\n"; return 1ll; } co[i]=1; fen.edit(i,-1); int f=0; if(x>0) f=1; int in=ind[y].back(); f+=max(0,fen.sum(in-1)-fen.sum(i)); co[in]=1; fen.edit(in,-1); ind[y].pop_back(); ans+=f; ind[x].pop_back(); } 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...