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 <bits/stdc++.h>
using namespace std;
queue <long long> q[2][200000];
long long n, idx, a[200000], ans, k, kx, xx[200000], m;
int alg (long long x) {
int num = 0;
for (int i = x; i >= 1; i -= (i&(-i)) ) num += xx[i];
return num;
}
void upd (int x, int y) {
for (int i = x; i <= n; i += (i&(-i)) ) xx[i] += y;
}
//int main() {
// cin>>n;
// for (int i = 1; i <= 2*n; i++) cin>>a[i];
long long count_swaps(std::vector <int> v) {
n = v.size();
for (long long i = 0; i < n; i++) v[i] = a[i+1];
for (int i = 1; i <= n; i++) upd(i,1);
for(int i = 1; i <= n; i++) {
if (a[i] < 0) {
if (q[1][abs(a[i])].empty()) q[0][abs(a[i])].push(i);
else {
ans += alg(i-1) - alg(q[1][abs(a[i])].front()-1);
upd(q[1][abs(a[i])].front(), 1);
upd(i, -1);
q[1][abs(a[i])].pop();
}
}
else {
if (q[0][a[i]].empty()) q[1][a[i]].push(i);
else {
ans += alg(i-1) - alg(q[0][a[i]].front()-1) - 1;
upd(q[0][a[i]].front(), 1);
upd(i, -1);
q[0][a[i]].pop();
}
}
}
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... |