#include "shoes.h"
#include <bits/stdc++.h>
//#define int long long
#define pb push_back
#define fs first
#define sc second
using namespace std;
const int MAXN = 400005;
long long bit[MAXN];
void upd(int idx, long long val){
while(idx < MAXN){
bit[idx] += val;
idx += idx & -idx;
}
}
long long get(int idx){
long long res = 0;
while(idx > 0){
res += bit[idx];
idx -= idx & -idx;
}
return res;
}
long long count_swaps(vector<int> s){
fill(bit, bit + MAXN, 0);
int n = (int)s.size();
map<int, deque<int>> L, R;
vector<pair<int,int>> p;
p.reserve(n / 2);
for(int i = 0; i < n; i++){
int x = s[i];
int sz = abs(x);
if(x > 0){
if(!R[sz].empty()){
int j = R[sz].front();
R[sz].pop_front();
p.pb({j, i});
}else{
L[sz].pb(i);
}
}else{
if(!L[sz].empty()){
int j = L[sz].front();
L[sz].pop_front();
p.pb({i, j});
}else{
R[sz].pb(i);
}
}
}
sort(p.begin(), p.end(), [](const pair<int,int>& a, const pair<int,int>& b){
return min(a.fs, a.sc) < min(b.fs, b.sc);
});
vector<int> tr(n);
for(int i = 0; i < (int)p.size(); i++){
tr[p[i].fs] = 2 * i + 1;
tr[p[i].sc] = 2 * i + 2;
}
long long ans = 0;
for(int i = 0; i < n; i++){
ans += i - get(tr[i]);
upd(tr[i], 1);
}
return ans;
}