Submission #1216094

#TimeUsernameProblemLanguageResultExecution timeMemory
1216094santi3223Arranging Shoes (IOI19_shoes)C++20
100 / 100
402 ms153864 KiB
#include <bits/stdc++.h> #include "shoes.h" using namespace std; #define ll long long #define vl vector<ll> #define vb vector<bool> #define pb push_back #define ff(aa, bb, cc) for(ll aa = bb; aa < cc; aa++) #define pll pair<ll, ll> #define fi first #define se second #define ed "\n" #define all(aaa) aaa.begin(), aaa.end() #define rall(aaa) aaa.rbegin(), aaa.rend() ll MOD = 1e9+7; vl t; vl arr; void build(ll i, ll l, ll r){ if(l == r){ t[i] = 1; return; } ll mid = (l+r)/2; build(2*i+1, l, mid); build(2*i+2, mid+1, r); t[i] = t[2*i+1]+t[2*i+2]; } void update(ll i, ll l, ll r, ll p, ll v){ if(l == r){ t[i] = v; return; } ll mid = (l+r)/2; if(p <= mid){ update(2*i+1, l, mid, p, v); } else{ update(2*i+2, mid+1, r, p, v); } t[i] = t[2*i+1]+t[2*i+2]; } ll query(ll i, ll tl, ll tr, ll ql, ll qr){ if(tr < ql || qr < tl){ return 0; } if(ql <= tl && tr <= qr){ return t[i]; } ll mid = (tl+tr)/2; return query(2*i+1, tl, mid, ql, qr)+query(2*i+2, mid+1, tr, ql, qr); } ll count_swaps(vector<int> S){ ll n = S.size(); map<ll, deque<ll>> mp; arr = vl(n); ff(i, 0, n){ arr[i] = S[i]; mp[arr[i]].pb(i); } t = vl(4*n, 0); build(0, 0, n-1); vb ok(n, true); ll c = 0; ff(i, 0, n){ if(ok[i]){ ll other = mp[-(arr[i])].front(); mp[-(arr[i])].pop_front(); ok[other] = false; if(arr[i] > 0){ c++; } mp[arr[i]].pop_front(); ll suma = query(0, 0, n-1, i, other); c += suma-query(0, 0, n-1, i, i)-query(0, 0, n-1, other, other); update(0, 0, n-1, i, 2); update(0, 0, n-1, other, 0); } } return c; } /* int main(){ ll n; cin >> n; vector<int> A(n); ff(i, 0, n){ cin >> A[i]; } cout << count_swaps(A); } */
#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...