Submission #1283049

#TimeUsernameProblemLanguageResultExecution timeMemory
1283049Math4Life2020Arranging Shoes (IOI19_shoes)C++20
45 / 100
68 ms21748 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<ll,ll>; const ll Nm = 262144; const ll E = 18; vector<ll> st(2*Nm,0); //segtree ll v2(ll x) { if (x==0) { return 100; } return __builtin_ctz(x); } void upd(ll x, ll v) { ll p = x+Nm; do { st[p]+=v; p=p/2; } while (p>0); } void init(ll N) { st = vector<ll>(2*Nm,0LL); for (ll i=0;i<(2*N);i++) { upd(i,1); } } ll qry(ll a, ll b) { if (a>b) { return 0; } if (v2(a)<v2(b+1)) { ll la = v2(a); return (st[(a>>la)+(1LL<<(E-la))]+qry(a+(1LL<<la),b)); } else { ll lb = v2(b+1); return (st[(b>>lb)+(1LL<<(E-lb))]+qry(a,b-(1LL<<lb))); } } ll count_swaps(vector<int> S) { ll N = S.size()/2; init(N); ll ans = 0; set<pii> sl; //left shoe: {x,#} set<ll> sr[N+1]; //right shoe: # -> x for (ll x=0;x<(2*N);x++) { ll y = S[x]; if (y<0) { sl.insert({x,-y}); } else { sr[y].insert(x); } } while (!sl.empty()) { pii p0 = *sl.begin(); sl.erase(sl.begin()); ans += qry(0,p0.first-1); upd(p0.first,-1); ll xf = *sr[p0.second].begin(); sr[p0.second].erase(sr[p0.second].begin()); ans += qry(0,xf-1); upd(xf,-1); } return ans; } // int main() { // ll N; cin >> N; // vector<int> S0; // for (ll i=0;i<(2*N);i++) { // ll t; cin >> t; // S0.push_back(t); // } // cout << count_swaps(S0); // }
#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...