#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll n, ans, fw[200000];
bool flag[200000];
set<int> s[100001], ns[100001];
void update(int i) {
for (; i < n; i = i | (i+1)) fw[i]++;
}
ll query(int i) {
ll ret = 0;
for (; i >= 0; i = (i & (i+1)) - 1) ret += fw[i];
return ret;
}
long long count_swaps(std::vector<int> v) {
n = v.size();
for (int i = 0; i < n; i++) if (v[i] > 0) s[v[i]].insert(i); else ns[-v[i]].insert(i);
for (int i = 0; i < n; i++) if (!flag[i]) {
if (v[i] > 0) {
ans += *ns[v[i]].begin()-i-(query(*ns[v[i]].begin())-query(i));
update(*ns[v[i]].begin());
flag[*ns[v[i]].begin()] = 1;
s[v[i]].erase(i);
ns[v[i]].erase(ns[v[i]].begin());
} else {
ans += *s[-v[i]].begin()-i-1-(query(*s[-v[i]].begin())-query(i));
update(*s[-v[i]].begin());
flag[*s[-v[i]].begin()] = 1;
ns[-v[i]].erase(i);
s[-v[i]].erase(s[-v[i]].begin());
}
}
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... |