| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1348335 | ykilra | Arranging Shoes (IOI19_shoes) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 4e5+50;
struct bit{
ll val[N];
void add(int id, int x) {
while (id < N) {
val[id] += x;
id += id & -id;
}
}
int query(int id) {
int sum = 0;
while (id > 0) {
sum += val[id];
id -= id & -id;
}
return sum;
}
}b;
ll n, a[N], ans;
vector<int> v[N];
bool paired[N];
long long count_swap(vector<int> S) {
int n = S.size();
for (int i = 1; i <= n; i++) {
a[i] = S[i-1];
v[a[i]+n].push_back(i);
b.add(i,1);
}
for (int i = n; i >= 1; i--) {
if (paired[i]) continue;
v[a[i]+n].pop_back();
int pos = v[n-a[i]].back();
v[n-a[i]].pop_back();
paired[pos] = 1;
b.add(pos,-1);
ans += b.query(i-1) - b.query(pos-1);
if (a[i] < 0) ans++; // left foot
}
return ans;
}
