#include <bits/stdc++.h>
#define ll long long
using namespace std;
class Lazy{
public:
vector<int>tree;
vector<int>lazy;
int n;
void init(int _n){
n = _n;
tree = vector<int>(n*4);
lazy = vector<int>(n*4);
}
int left(int i) { return i*2+1; }
int right(int i) { return i*2+2; }
void update_lazy(int l,int r,int node){
tree[node] += lazy[node];
if(l != r){
lazy[left(node)] += lazy[node];
lazy[right(node)] += lazy[node];
}
lazy[node] = 0;
}
void update(int ql,int qr,int l,int r,int node){
update_lazy(l,r,node);
if(ql > r || qr < l) return;
if(ql <= l && r <= qr){
lazy[node]++;
return;
}
int mid = (l+r)/2;
update(ql,qr,l,mid,left(node));
update(ql,qr,mid+1,r,right(node));
return;
}
ll query(int ql,int qr,int l,int r,int node){
update_lazy(l,r,node);
if(ql > r || qr < l) return 0;
if(ql <= l && r <= qr){
return tree[node];
}
int mid = (l+r)/2;
return query(ql,qr,l,mid,left(node)) + query(ql,qr,mid+1,r,right(node));
}
};
vector<int>vis;
Lazy tree;
long long count_swaps(std::vector<int> s) {
int n = s.size();
tree.init(n);
vis = vector<int>(n,0);
int mx = 0;
for(int i = 0;i < n;i++) mx = max(mx,s[i]);
mx++;
unordered_map<int,int>um;
unordered_map<int,queue<int>>num;
for(int i = 0;i < s.size();i++){
if(um.find(s[i]) != um.end()){
int neg = (s[i] > 0);
if(!neg) neg--;
int t = s[i];
if(!num[s[i]].empty()){
s[i] = num[s[i]].front() * neg;
um[s[i]] = i;
num[t].pop();
}
else{
num[s[i] * -1].push(mx);
s[i] = mx * neg;
um[s[i]] = i;
mx++;
}
}
else{
um[s[i]] = i;
}
}
// for(auto x : um){
// cout << x.first << ' ' << x.second << '\n';
// }
ll cnt = 0;
for(int i = 0;i < s.size();i++){
if(vis[i]) continue;
vis[i] = 1;
int pos = um[s[i] * -1];
int q = tree.query(i,i,0,n-1,0) - tree.query(pos,pos,0,n-1,0);
cnt -= q;
// cout << i << ' ' << pos << ' ' << q << ' ' << s[i] << '\n';
tree.update(i,pos,0,n-1,0);
vis[pos] = 1;
cnt += (ll)(pos - i - 1);
if(s[i] > 0) cnt++;
// cout << cnt << '\n';
}
return cnt;
}
// int main() {
// int n;
// assert(1 == scanf("%d", &n));
// vector<int> S(2 * n);
// for (int i = 0; i < 2 * n; i++)
// assert(1 == scanf("%d", &S[i]));
// fclose(stdin);
// long long result = count_swaps(S);
// printf("%lld\n", result);
// fclose(stdout);
// return 0;
// }