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;
const int MAXN = 212345;
vector <int> v[2 * MAXN];
int id1[2 * MAXN];
int seg[4 * MAXN];
int query(int cur, int ini, int fim, int a, int b) {
if(ini > b || fim < a) return 0;
if(ini >= a && fim <= b) return seg[cur];
int m = (ini + fim) / 2;
int e = 2 * cur, d = 2 * cur + 1;
return query(e, ini, m, a, b) + query(d, m + 1, fim, a, b);
}
void update(int cur, int ini, int fim, int id, int val) {
if(ini > id || fim < id) return;
if(ini == fim) {
seg[cur] = val;
return;
}
int m = (ini + fim) / 2;
int e = 2 * cur, d = 2 * cur + 1;
update(e, ini, m, id, val); update(d, m + 1, fim, id, val);
seg[cur] = seg[e] + seg[d];
}
long long count_swaps(vector<int> s) {
int n = s.size();
long long resp = 0;
for(int i = 0; i < n; i++) {
update(1, 0, n - 1, i, 1);
int a = s[i];
if(a < 0) {
a = -a + MAXN;
}
v[a].push_back(i);
}
for(int i = 0; i < n; i++) {
if(query(1, 0, n - 1, i, i) == 0) continue;
if(s[i] > 0) resp++;
int a = s[i], b = -s[i];
if(a < 0) {
a = -a + MAXN;
}
if(b < 0) {
b = -b + MAXN;
}
int ida = v[a][id1[a]], idb = v[b][id1[b]];
int q = query(1, 0, n - 1, 0, ida), r = query(1, 0, n - 1, 0, idb);
resp += q + r - 3;
id1[a]++; id1[b]++;
//printf("%d %d\n", query(1, 0, n - 1, 0, ida), query(1, 0, n - 1, 0, idb));
//resp += query(1, 0, n - 1, 0, ida) + query(1, 0, n - 1, 0, idb) - 2;
//id1[a]++; id1[b]++;
update(1, 0, n - 1, ida, 0); update(1, 0, n - 1, idb, 0);
//printf("%d\n", resp);
}
return resp;
}
# | 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... |