이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "shoes.h"
using namespace std;
const int MAX_N = 2e5 + 10;
queue <int> pos[MAX_N];
class FenwickTree {
private :
int N;
vector <int> fenwick;
public :
FenwickTree() {}
FenwickTree(int n) : N(n), fenwick(N + 1) {}
void update(int idx, int val) {
for(int x = idx; x > 0; x -= (x & -x)) {
fenwick[x] += val;
}
}
int query(int idx) {
int res = 0;
for(int x = idx; x <= N; x += (x & -x)) {
res += fenwick[x];
}
return res;
}
}fw;
long long count_swaps(vector<int> s) {
int n = s.size() / 2;
fw = FenwickTree(2 * n);
for(int i = 0; i < 2 * n; i++) {
int idx = s[i] + n;
if(s[i] < 0) {
idx = -s[i];
}
pos[idx].push(i + 1);
}
long long ans = 0;
for(int i = 1; i <= n; i++) {
while(!pos[i].empty()) {
if(pos[i].front() < pos[i + n].front()) {
ans += pos[i + n].front() - pos[i].front() - 1 + fw.query(pos[i].front());
fw.update(pos[i + n].front(), 1);
fw.update(pos[i].front() - 1, -1);
}
else {
ans += pos[i].front() - pos[i + n].front() + fw.query(pos[i + n].front());
fw.update(pos[i].front(), 1);
fw.update(pos[i + n].front() - 1, -1);
}
pos[i].pop();
pos[i + n].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... |