Submission #418620

#TimeUsernameProblemLanguageResultExecution timeMemory
418620jasminArranging Shoes (IOI19_shoes)C++14
100 / 100
731 ms149284 KiB
#include<bits/stdc++.h> #include "shoes.h" using namespace std; vector<int> seg; int get(int l, int r, int n, int ql, int qr){ if(r<=ql || l>=qr) return 0; if(l>=ql && r<=qr) return seg[n]; int m=l+(r-l)/2; return get(l, m, n*2+1, ql, qr)+get(m, r, n*2+2, ql, qr); } int set_value(int l, int r, int n, int i, int x){ if(r<=i || l>i) return seg[n]; if(l+1==r) return seg[n]=x; int m=l+(r-l)/2; return seg[n]=set_value(l, m, n*2+1, i, x)+set_value(m, r, n*2+2, i, x); } long long count_swaps(std::vector<int> s) { int a=s.size(); seg.assign(4*a, 0); for(int i=0; i<a; i++){ set_value(0, a, 0, i, 1); } map<int, queue<int> >l; map<int, queue<int> >r; for(int i=0; i<a; i++){ if(s[i]<0){ l[-s[i]].push(i); } else{ r[s[i]].push(i); } } long long ans=0LL; vector<bool> done(a); for(int i=0; i<a; i++){ if(done[i]) continue; if(s[i]<0){ l[-s[i]].pop(); int next=r[-s[i]].front(); r[-s[i]].pop(); ans+=get(0, a, 0, i, next)-1; set_value(0, a, 0, next, 0); done[next]=true; } else{ r[s[i]].pop(); int next=l[s[i]].front(); l[s[i]].pop(); ans+=get(0, a, 0, i, next); set_value(0, a, 0, next, 0); done[next]=true; } } 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...