Submission #1196810

#TimeUsernameProblemLanguageResultExecution timeMemory
1196810MateiKing80Arranging Shoes (IOI19_shoes)C++20
100 / 100
127 ms138948 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 1e5 + 10; queue<int> d[2 * MAXN]; bitset<2 * MAXN> v; long long ft[2 * MAXN]; int N; void update(int k,long long val) { int x = k + 1; while (x <= N) { ft[x] += val; x += x & -x; } } long long query(int k) { int x = k + 1; long long s = 0; while (x > 0) { s += ft[x]; x -= x & (-x); } return s; } long long count_swaps(vector<int> s) { N=s.size(); long long ans=0; for (int i = 0; i < N; i ++) d[s[i] + MAXN].push(i); for (int i = 0; i < N; i ++) update(i,1); for (int i = 0; i < N; i ++) { if(v[i]) continue; d[s[i] + MAXN].pop(); int h = d[MAXN - s[i]].front(); d[MAXN - s[i]].pop(); v[i] = 1; v[h] = 1; ans += query(h) - query(i) - 1; update(i, 1); update(h, -1); if (s[i] > s[h]) ans ++; } 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...