#include<bits/stdc++.h>
#define ll long long
#define exoworldgd cin.tie(0)->sync_with_stdio(0),cout.tie(0)
using namespace std;
struct BIT{
int n;vector<int>t;
BIT(int n):n(n),t(n+1){}
void upd(int i,int v){for(i++;i<=n;i+=i&-i)t[i]+=v;}
int qry(int i){int r=0;for(i++;i;i-=i&-i)r+=t[i];return r;}
int qry(int l,int r){return qry(r)-(l?qry(l-1):0);}
};
ll count_swaps(vector<int>s) {
int n=s.size(),ans=0;
map<int,queue<int>>mp;
for(int i=0;i<n;i++)mp[s[i]].push(i);
BIT bit(n);
for(int i=0,cur,pos,a,b;i<n;i+=2){
cur=mp[s[i]].front(),mp[s[i]].pop(),pos=mp[-s[i]].front(),mp[-s[i]].pop(),a=cur+bit.qry(cur),b=pos+bit.qry(pos);
if(a>b)swap(a,b);
ans+=b-a-1,ans+=s[cur]>0,bit.upd(cur,-1),bit.upd(pos,-1),bit.upd(i,1),bit.upd(i+1,1);
}
return ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |