Submission #724019

#TimeUsernameProblemLanguageResultExecution timeMemory
724019sandry24Arranging Shoes (IOI19_shoes)C++17
50 / 100
331 ms295676 KiB
#include <bits/stdc++.h> using namespace std; //#pragma GCC optimize("O3,unroll-loops") //#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") typedef long long ll; typedef vector<int> vi; typedef pair<int, int> pi; #define pb push_back #define mp make_pair #define f first #define s second const int sz = 100005; ll BIT[sz]; void add(ll x, ll delta){ for(; x < sz; x += x & -x) BIT[x] += delta; } ll sum(ll x){ ll res = 0; for(; x > 0; x -= x & -x) res += BIT[x]; return res; } ll count_swaps(vi s){ map<int, deque<int>> m; int n = s.size(); vector<bool> marked(n+5); for(int i = 0; i < n; i++) m[s[i]].pb(i); ll ans = 0; for(int i = 0; i < n; i++){ if(marked[i]) continue; deque<int>& posNeg = m.at(-s[i]); int ind = posNeg.front(); posNeg.pop_front(); m.at(s[i]).pop_front(); marked[i] = marked[ind] = 1; //cerr << s[i] << ' ' << i << ' ' << ind << ' ' << sum(ind) << '\n'; ans += ind - (sum(ind) - sum(i)) - i; if(s[i] < 0) ans--; add(ind+1, 1); //cout << ans << '\n'; } 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...