Submission #1290306

#TimeUsernameProblemLanguageResultExecution timeMemory
1290306kutomei3Arranging Shoes (IOI19_shoes)C++20
100 / 100
52 ms16064 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; vector<int> b(200005, 0); void upd(int ind, int val) { for (; ind <= 200005; ind += ind & -ind) { b[ind] += val; } } int qa(int ind) { int res = 0; for (; ind > 0; ind -= ind & -ind) { res += b[ind]; } return res; } long long count_swaps(vector<int> s) { int n = s.size() / 2; priority_queue<int, vector<int>, greater<int>> l[n + 3], r[n + 3]; for (int i = 0; i < 2 * n; i++) { //cout << "LL"; if (s[i] < 0) l[abs(s[i])].push(i); else r[s[i]].push(i); } long long ct = 0; vector<int> vis(2 * n + 1, 1); for (int i = 0; i < 2 * n; i++) { if (!vis[i]) continue; if (s[i] > 0) { int u = s[i]; r[u].pop(); //cout << "1 " << i << ' ' << l[u].top() << ' ' << l[u].top() - i << '\n'; ct += l[u].top() - i - qa(l[u].top()) + qa(i); vis[l[u].top()] = 0; upd(l[u].top(), 1); l[u].pop(); } else { int u = abs(s[i]); l[u].pop(); //cout << "2 " << i << ' ' << r[u].top() << ' ' << r[u].top() - i - 1 << '\n'; ct += r[u].top() - i - 1 - qa(r[u].top()) + qa(i); upd(r[u].top(), 1); vis[r[u].top()] = 0; r[u].pop(); } } return ct; }
#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...