#include <bits/stdc++.h>
#define pb push_back
#define ll long long
#define vll vector<ll>
#define vbool vector<bool>
#define pairll pair<ll,ll>
#define fi first
#define sc second
#define rever greater<ll>()
using namespace std;
void add(vll &tree, ll x, ll v){
if(x == 0)return;
while(x < tree.size()){
//cout << 'p';
tree[x] += v;
x += (x&(-x));
}
}
ll query(vll &tree, ll l, ll r){
ll res = 0;
while(r > 0){
//cout << "p";
res += tree[r];
r -= (r&(-r));
}l--;
while(l > 0){
//cout << "p";
res -= tree[l];
l -= (l&(-l));
//cout << l << ' ';
}return res;
}
ll count_swaps(vector<int> a){
ll n = a.size(); n/=2;
vector<set<ll>> l(n+1), r(n+1);
for(ll i = 0; i < n*2; i++){
if(a[i] < 0){
l[abs(a[i])].insert(i+1);
}else{
r[abs(a[i])].insert(i+1);
}
}
vll tree(n*2+1);
for(ll i = 1; i <= n*2; i++){
add(tree, i, 1);
}
ll res = 0, x;
vbool b(n*2);
for(ll i = 0; i < n*2; i++){
if(b[i])continue;
if(a[i] < 0){
x = *(r[abs(a[i])].upper_bound(i+1));
res += query(tree, i+2, x-1);
add(tree, x, -1);
r[abs(a[i])].erase(x);
b[x-1] = true;
}else{
x = *(l[abs(a[i])].upper_bound(i+1));
//cout << x << endl;
res += query(tree, i+1, x-1);
add(tree, x, -1);
l[abs(a[i])].erase(x);
b[x-1] = true;
}//cout << i << ' ' << res << endl;
}return res;
}
// int main(){
// cout << count_swaps({-2, 2, 2, -2, -2, 2});
// }