Submission #422941

#TimeUsernameProblemLanguageResultExecution timeMemory
422941donentsetoArranging Shoes (IOI19_shoes)C++14
10 / 100
96 ms134928 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 200005; int n; int paired [maxn]; stack <int> st [maxn]; int fenwick [maxn]; void upd (int x){ while (x <= n){ fenwick [x] ++; x += x & -x; } } int query (int x){ int ans = 0; while (x > 0){ ans += fenwick [x]; x -= x & -x; } return ans; } long long count_swaps (vector <int> a){ n = a.size (); long long ans = 0; for (int i = 0; i < n; i ++){ int size = abs (a [i]); if (st [size].empty () || a [st [size].top ()] == a [i]) st [size].push (i); else{ paired [st [size].top ()] = i; paired [i] = -1; if (a [i] < 0) ans ++; st [size].pop (); } } int cnt = 0; for (int i = 0; i < n; i ++){ if (paired [i] == -1) continue; ans += cnt * 2; ans -= query (paired [i]); ans -= query (i); upd (paired [i]); cnt ++; } return ans; } //int main (){ //cout << count_swaps ({2, 1, -1, -2}) << '\n'; //}
#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...