This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int mxN = 2e5+3;
ll idx[mxN];
struct FenwickTree {
ll tr[mxN];
ll LSB(ll x) {
return (x) & (-x);
}
void add(ll i) {
for (; i < mxN; i += LSB(i))++tr[i];
}
ll rsq(ll i) {
ll s = 0;
for (; i > 0; i -= LSB(i))s += tr[i];
return s;
}
ll rsq(ll i, ll j) {
return rsq(j) - (i > 1 ? rsq(i-1) : 0);
}
};
long long count_swaps(std::vector<int> s) {
int n = s.size();
for (int i = 1; i <= n; ++i) {
idx[abs(s[i-1])] = i;
}
FenwickTree ft;
ll ans = 0;
for (int i = 1; i <= n; ++i) {
int curr = s[i-1];
if (idx[abs(curr)] == i)continue;
int nidx = idx[abs(curr)];
ll dist = nidx - i - 1 - ft.rsq(i, nidx);
if (s[i-1] > 0)++dist;
ans += dist;
ft.add(nidx);
}
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... |