제출 #721419

#제출 시각아이디문제언어결과실행 시간메모리
721419sofija6Arranging Shoes (IOI19_shoes)C++14
100 / 100
629 ms148756 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; ll n; struct bit { vector<ll> v; void Init() { v.resize(n+5); } void Add(ll pos,ll val) { for (ll i=pos;i<=n;i+=i&(-i)) v[i]+=val; } ll Sum(ll pos) { ll ans=0; for (ll i=pos;i>0;i-=i&(-i)) ans+=v[i]; return ans; } ll Calc(ll l,ll r) { return Sum(r)-Sum(l-1); } }; ll count_swaps(vector<int> S) { n=S.size(); bit B; B.Init(); map<ll,queue<ll> > posl,posr; ll ans=0; for (ll i=0;i<n;i++) { if (S[i]>0) posr[S[i]].push(i+1); else posl[-S[i]].push(i+1); B.Add(i+1,1); } for (ll i=0;i<n;i++) { if (S[i]>0 && (!posr[S[i]].empty() && posr[S[i]].front()==i+1)) { ans+=B.Calc(i+1,posl[S[i]].front()-1); B.Add(posl[S[i]].front(),-1); posl[S[i]].pop(); posr[S[i]].pop(); continue; } if (S[i]<0 && (!posl[-S[i]].empty() && posl[-S[i]].front()==i+1)) { ans+=B.Calc(i+2,posr[-S[i]].front()-1); B.Add(posr[-S[i]].front(),-1); posl[-S[i]].pop(); posr[-S[i]].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...