#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct node {
int s, e, m, v;
node* l, * r;
node(int _s, int _e) : s(_s), e(_e), m((_s + _e) / 2), v(0) {
if (s != e)
l = new node(s, m),
r = new node(m + 1, e);
}
void upd(int n, int x) {
if (s == e) {
v += x;
return;
}
if (n <= m) l->upd(n, x);
else r->upd(n, x);
v = l->v + r->v;
}
int qry(int a, int b) {
if (b < s || a > e) return 0;
if (a <= s && b >= e) return v;
return l->qry(a, b) + r->qry(a, b);
}
} *root;
long long count_swaps(std::vector<signed> s) {
int N = s.size() / 2;
root = new node(0, 2 * N);
vector<queue<int>> things(N + 1, queue<int>());
vector<int> state(N + 1, 0);
vector<pair<int, int>> pairs;
for (int i = 0; i < 2 * N; i++) {
if (s[i] > 0) {
if (state[s[i]] == -1) {
pairs.push_back(pair<int, int>(things[s[i]].front(), i));
things[s[i]].pop();
if (things[s[i]].empty()) state[s[i]] = 0;
}
else {
things[s[i]].push(i);
state[s[i]] = 1;
}
}
else {
if (state[-s[i]] == 1) {
pairs.push_back(pair<int, int>(i, things[-s[i]].front()));
things[-s[i]].pop();
if (things[-s[i]].empty()) state[-s[i]] = 0;
}
else {
things[-s[i]].push(i);
state[-s[i]] = -1;
}
}
}
sort(pairs.begin(), pairs.end());
vector<int> goal(2 * N, 0);
for (int i = 0; i < N; i++) {
goal[pairs[i].first] = 2 * i;
goal[pairs[i].second] = 2 * i + 1;
}
int ans = 0;
for (int i = 0; i < 2 * N; i++) {
ans += root->qry(goal[i] + 1, 2 * N);
root->upd(goal[i], 1);
}
return ans;
}