#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MXN = 1e5+5;
int n, val[MXN];
int fen[MXN<<1];
vector<int> vec[MXN][2];
inline void upd(int p) {
for(; p<=2*n; p+=p&-p) fen[p]++;
}
inline int get(int p) {
int res=0;
for(; p; p-=p&-p) res += fen[p];
return res;
}
ll count_swaps(vector<int> S) {
n = S.size();
n >>= 1;
for(int i=0; i<(n<<1); i++)
vec[abs(S[i])][S[i]<0].push_back(i);
int ptr=0;
for(int x=1; x<=n; x++) {
for(int i=0; i<vec[x][0].size(); i++) {
S[vec[x][0][i]] = ++ptr;
S[vec[x][1][i]] = -ptr;
}
}
ptr = 0;
ll ans = 0;
for(int i=0; i<(n<<1); i++) {
if(!val[abs(S[i])]) val[abs(S[i])] = ++ptr;
ans += get(2*n+1 - 2*val[abs(S[i])]+(S[i]<0));
upd(2*n+1 - 2*val[abs(S[i])]+(S[i]<0));
}
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... |