Submission #1212536

#TimeUsernameProblemLanguageResultExecution timeMemory
1212536loiiii12358Arranging Shoes (IOI19_shoes)C++20
45 / 100
52 ms5808 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; vector<int> seg; void build(int id,int l,int r){ if(l==r){ seg[id]=1; return; } int m=(l+r)/2; build(id*2,l,m); build(id*2+1,m+1,r); seg[id]=seg[id*2]+seg[id*2+1]; } void update(int id,int l,int r,int x){ if(l==r){ seg[id]=0; return; } int m=(l+r)/2; if(x<=m){ update(id*2,l,m,x); }else{ update(id*2+1,m+1,r,x); } seg[id]=seg[id*2]+seg[id*2+1]; } int query(int id,int l,int r,int x){ if(r<=x){ return seg[id]; }else if(l>x){ return 0; } int m=(l+r)/2; return query(id*2,l,m,x)+query(id*2+1,m+1,r,x); } long long count_swaps(vector<int> s) { long long n=s.size()/2,ans=0,l,r; queue<int> pos,neg; for(int i=0;i<2*n;i++){ if(s[i]>0){ pos.push(i); }else{ neg.push(i); } } seg.resize(8*n); build(1,0,2*n-1); for(int i=0;i<n;i++){ l=query(1,0,2*n-1,neg.front())-1; r=query(1,0,2*n-1,pos.front())-1; if(l<r){ r--; } ans+=l+r; update(1,0,2*n-1,neg.front()); update(1,0,2*n-1,pos.front()); neg.pop();pos.pop(); } 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...