#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int fw[200050];
queue <int> qu1[200050];//positive
queue <int> qu2[200050];//negative, store as positive
void update(int id,int n,int va){
for (int i = id; i<=n; i+=(i&-i)){
fw[i]+=va;
}
}
int query(int id,int n){
int tmp = 0;
for (int i = id; i>=1; i-=(i&-i)){
tmp += fw[i];
}
return tmp;
}
long long count_swaps(std::vector<int> s) {
ll si = s.size();
//cout << si << "\n";
ll ans = 0;
for (ll i=0; i<si; i++){
//cout << i << ' ';
int tmi = i - query(i+1,si);
if(s[i] > 0){
if(!qu2[s[i]].size()){
qu1[s[i]].push(i);
}else{
ans += tmi - (qu2[s[i]].front() + query(qu2[s[i]].front()+1,si)) - 1;
//cout << i << "|" << tmi - (qu2[s[i]].front() - query(qu2[s[i]].front()+1,si)) - 1 << " " << tmi << " " << qu2[s[i]].front() << " " << query(qu2[s[i]].front()+1,si) << "|\n";
update(qu2[s[i]].front()+1,si,1);
update(i+1,si,-1);
qu2[s[i]].pop();
}
}else{
s[i] *= -1;
if(!qu1[s[i]].size()){
qu2[s[i]].push(i);
}else{
ans += tmi - (qu1[s[i]].front() + query(qu1[s[i]].front()+1,si));
//cout << i << "|" << tmi - (qu1[s[i]].front() - query(qu1[s[i]].front()+1,si)) << " " << tmi << " " << qu1[s[i]].front() << " " << query(qu1[s[i]].front()+1,si) << "||\n";
update(qu1[s[i]].front()+1,si,1);
update(i+1,si,-1);
qu1[s[i]].pop();
}
}
//cout << "E";
}
return ans;
}