#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void dbg() { cout << "\n"; }
template<typename H, typename... T>
void dbg(H h, T... t) {
cout << h << " ";
dbg(t...);
}
#define pii pair<int,int>
const int N = 2e5+10;
int n,fw[N],mark[N];
deque<int> a[N],b[N];
struct hee {
int w,i,j;
bool operator < (const hee&o) const {
return w < o.w;
}
};
vector<hee> v;
void upd(int i, int v) {
if (i == 0) return;
for (i; i <= n; i+=i&-i) {
fw[i] += v;
}
}
int query(int i) {
int sum = 0;
for (i; i > 0; i-=i&-i) {
sum += fw[i];
}
return sum;
}
long long count_swaps(vector<int> s) {
n = s.size();
deque<int> l,r;
for (int i = 0; i < n; i++) {
if (s[i] < 0) a[-s[i]].push_back(i+1), l.push_back(i+1);
else b[s[i]].push_back(i+1), r.push_back(i+1);
}
for (int i = 1; i <= n; i++) upd(i,1);
ll ans = 0;
for (int i = 1; i <= n; i++) {
if (mark[i]) continue;
int x = abs(s[i-1]);
while (!a[x].empty() && mark[a[x].front()]) a[x].pop_front();
while (!b[x].empty() && mark[b[x].front()]) b[x].pop_front();
if (s[i-1] < 0) {
a[x].pop_front();
int idx = b[x].front(); b[x].pop_front();
ans += query(idx)-query(i)-1;
mark[i] = mark[idx] = 1;
upd(i,-1);
upd(idx,-1);
} else {
b[x].pop_front();
int idx = a[x].front(); a[x].pop_front();
ans += query(idx)-query(i);
mark[i] = mark[idx] = 1;
upd(i,-1);
upd(idx,-1);
}
}
return ans;
}