이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
queue<int> q[200200];
int b[200200], bit[200200];
void add(int x)
{
for (int i = x; i <= 200000; i += i & -i)
bit[i]++;
}
int get(int x)
{
int res = 0;
for (int i = x; i; i -= i & -i)
res += bit[i];
return res;
}
long long count_swaps(vector<int> a)
{
int n = a.size() / 2, id = 0;
for (int i = 0; i < n * 2; i++)
if (q[n - a[i]].empty())
{
q[a[i] + n].push(i);
b[i] = id * 2;
id++;
}
else
{
int j = q[n - a[i]].front();
q[n - a[i]].pop();
b[i] = b[j] + 1;
if (a[i] < 0)
swap(b[i], b[j]);
}
long long ans = 0;
for (int i = 0; i < n * 2; i++)
{
ans += i - get(b[i]);
add(b[i] + 1);
}
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... |