#include <bits/stdc++.h>
#define endl '\n'
#define ll long long
using namespace std;
const int N = 200005;
vector<int>lef[N+2],rig[N+3];
int pr[N+3],tr[N+3];
int n;
void up(int i,int x){
for(;i<=n;i+=i&-i)tr[i]+=x;
}
int que(int i){
int sum=0;
for(;i>=1;i-=i&-i)sum+=tr[i];
return sum;
}
long long count_swaps(std::vector<int> s){
n=s.size();
set<int>st;
for(int i=1;i<=n;i++){
int x=s[i-1];
if(x<0){
lef[-x].emplace_back(i);
}
else{
rig[x].emplace_back(i);
st.insert(x);
}
up(i,1);
}
for(auto x:st){
for(int i=0;i<lef[x].size();i++){
pr[lef[x][i]]=rig[x][i];
pr[rig[x][i]]=lef[x][i];
}
}
long long ans = 0; // Fix: Changed from int to long long to prevent overflow
for(int i=1;i<=n;i++){
int alive=que(i)-que(i-1);
if(!alive)continue;
int bet=que(pr[i]-1)-que(i);
if(s[pr[i]-1]<0)++bet; // Extra swap if left shoe is to the right of right shoe
up(pr[i],-1);
ans+=bet;
}
return ans;
}