이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
# 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... |