Submission #1165978

#TimeUsernameProblemLanguageResultExecution timeMemory
1165978duccnammArranging Shoes (IOI19_shoes)C++20
50 / 100
81 ms136520 KiB
#include<bits/stdc++.h> #include "shoes.h" using namespace std; #define ll int ll n,f[800005],dk[100005],d; queue<ll>vt[100005],vt1[100005]; long long ans; bool kt[800005]; void update(ll id,ll l,ll r,ll u,ll v) { if(l>u||r<u) return; if(l==r) { f[id]+=v; return; } ll mid=(l+r)/2; update(id*2,l,mid,u,v); update(id*2+1,mid+1,r,u,v); f[id]=f[id*2]+f[id*2+1]; } ll getsum(ll id,ll l,ll r,ll u,ll v) { if(l>v||r<u) return 0; if(l>=u&&r<=v) return f[id]; ll mid=(l+r)/2; return getsum(id*2,l,mid,u,v)+getsum(id*2+1,mid+1,r,u,v); } long long count_swaps(vector<int>s) { n=s.size()/2; for(int i=1;i<=n;i++) { while(!vt[s[i]].empty()) vt[s[i]].pop(); while(!vt1[s[i]].empty()) vt1[s[i]].pop(); } ans=0; for(int i=0;i<s.size();i++) if(s[i]<0) vt[-s[i]].push(i); else vt1[s[i]].push(i); for(int i=0;i<s.size();i++) if(kt[i]==0) { if(s[i]>0) { d=vt[s[i]].front(); vt[s[i]].pop(); vt1[s[i]].pop(); ans+=d-i-getsum(1,0,n*2-1,i,d-1); kt[d]=1; update(1,0,2*n-1,d,1); } else { d=vt1[-s[i]].front(); vt1[-s[i]].pop(); vt[-s[i]].pop(); ans+=d-i-1-getsum(1,0,n*2-1,i,d-1); kt[d]=1; update(1,0,2*n-1,d,1); } } return ans; } //int main() //{ // cout<< count_swaps({2, 1, -1, -2}); //}
#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...