Submission #1194198

#TimeUsernameProblemLanguageResultExecution timeMemory
1194198PlayVoltzArranging Shoes (IOI19_shoes)C++20
100 / 100
347 ms165584 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; #define pb push_back struct node{ int s, e, m, val; node *l, *r; node(int S, int E){ s = S, e = E, m = (s+e)/2; val=e-s+1; if (s!=e){ l = new node(s, m); r = new node(m+1, e); } } void up(int ind, int nv){ if (s==e)val=nv; else{ if (ind<=m)l->up(ind, nv); else r->up(ind, nv); val = l->val+r->val; } } int query(int left, int right){ if (left>right)return 0; if (s==left && e==right)return val; if (right<=m)return l->query(left, right); else if (left>m)return r->query(left, right); else return l->query(left, m)+r->query(m+1, right); } }*st; long long count_swaps(vector<int> vect){ long long ans=0; st = new node(0, vect.size()-1); vector<int> r(vect.size(), -1); map<int, deque<int> > id; for (int i=0; i<vect.size(); ++i){ if (id[-vect[i]].size())r[id[-vect[i]][0]]=i, id[-vect[i]].pop_front(); else id[vect[i]].pb(i); } for (int i=0; i<vect.size(); ++i){ if (r[i]==-1)continue; ans+=st->query(i+1, r[i]-1); if (vect[i]>vect[r[i]])++ans; st->up(r[i], 0); } 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...