#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int aib[200005],cate;
int qry(int poz)
{
int aux=0;
for(int i=poz;i<=cate;i+=(i&(-i)))
aux += aib[i];
return aux;
}
void upd(int poz, int newv)
{
for(int i=poz;i>0;i-=(i&(-i)))
aib[i] += newv;
}
long long nrinv(vector<int> S)
{
long long rez=0;
cate = S.size();
for(int i=0;i<S.size();i++)
{
rez += qry(abs(S[i]) + 1);
upd(abs(S[i]), +1);
}
return rez;
}
map<int,set<int>> ofval;
bool used[200005];
long long count_swaps(std::vector<int> S)
{
int n = S.size();
for(int i=0;i<n;i++)
ofval[S[i]].insert(i);
long long rez=0;
vector<int> newv;
for(int i=0;i<n;i++)
{
if(used[i])
continue;
auto it = ofval[-S[i]].upper_bound(i);
newv.push_back(i);
newv.push_back(*it);
used[(*it)] = used[i] = 1;
ofval[-S[i]].erase(it);
ofval[S[i]].erase(i);
if(S[i] > 0)
rez++;
}
rez += nrinv(newv);
return rez;
}
# | 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... |