| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1332281 | riafhasan2010 | Arranging Shoes (IOI19_shoes) | C++17 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll count_swaps(vector<int> s) {
int n = s.size();
vector<queue<int>> l(n + 1), r(n + 1);
for (int i = 0; i < n; i++) {
(s[i] < 0 ? l : r)[abs(s[i])].push(i);
s[i] = abs(s[i]);
}
vector<bool> vis(n + 1, 0);
vector<int> v;
ll ans = 0;
for (int i = 0, cur = 0; i < n; i++) {
if (vis[i]) continue;
int left = l[s[i]].front(); l[s[i]].pop();
int right = r[s[i]].front(); r[s[i]].pop();
vis[left] = vis[right] = true;
int leftind = upper_bound(v.begin(), v.end(), left) - v.begin();
leftind = left + v.size() - leftind;
ans += abs(leftind - cur * 2);
v.insert(upper_bound(v.begin(), v.end(), left), left);
int rightind = upper_bound(v.begin(), v.end(), right) - v.begin();
rightind = right + v.size() - rightind;
ans += abs(rightind - (cur * 2 + 1));
v.insert(upper_bound(v.begin(), v.end(), right), right);
cur++;
}
return ans;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n; cin >> n; n *= 2;
vector<int> s(n);
for (int i = 0; i < n; i++) {
cin >> s[i];
}
cout << count_swaps(s) << '\n';
}
