제출 #422946

#제출 시각아이디문제언어결과실행 시간메모리
422946donentsetoArranging Shoes (IOI19_shoes)C++14
100 / 100
168 ms139360 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 200005; int n; int paired [maxn]; queue <int> q [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 (q [size].empty () || a [q [size].front ()] == a [i]) q [size].push (i); else{ paired [q [size].front ()] = i; paired [i] = -1; if (a [i] < 0) ans ++; q [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...