#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define DEBUG 0
using namespace std;
using namespace __gnu_pbds;
template <typename T>
using ordered_set = tree <T, null_type, less <T>, rb_tree_tag, tree_order_statistics_node_update>;
const int MAX_N = 4e5 + 10;
int n, cnt;
int L[MAX_N], R[MAX_N];
ordered_set <int> arr[MAX_N];
int read_input() {
int now;
cin >> now;
if(now == 0) {
now = ++cnt;
L[now] = read_input();
R[now] = read_input();
}
else {
now += n;
L[now] = R[now] = -1;
}
return now;
}
long long dfs(const int &u) {
if(L[u] == -1 and R[u] == -1) {
arr[u].insert(u - n);
return 0;
}
int v1 = L[u], v2 = R[u];
long long res = dfs(v1) + dfs(v2);
long long inv = 0, all = arr[v1].size() * arr[v2].size();
if(arr[v1].size() < arr[v2].size()) {
swap(v1, v2);
}
for(auto x : arr[v2]) {
inv += arr[v1].size() - arr[v1].order_of_key(x + 1);
}
inv = min(inv, all - inv);
swap(arr[u], arr[v1]);
for(auto x : arr[v2]) {
arr[u].insert(x);
}
return res + inv;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n;
read_input();
cout << dfs(1);
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
24 ms |
31572 KB |
Output is correct |
2 |
Correct |
26 ms |
31572 KB |
Output is correct |
3 |
Correct |
28 ms |
31572 KB |
Output is correct |
4 |
Correct |
26 ms |
31736 KB |
Output is correct |
5 |
Correct |
29 ms |
31644 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
25 ms |
31572 KB |
Output is correct |
2 |
Correct |
26 ms |
31572 KB |
Output is correct |
3 |
Correct |
25 ms |
31564 KB |
Output is correct |
4 |
Correct |
24 ms |
31564 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
28 ms |
31688 KB |
Output is correct |
2 |
Correct |
27 ms |
31840 KB |
Output is correct |
3 |
Correct |
27 ms |
31864 KB |
Output is correct |
4 |
Correct |
31 ms |
31828 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
225 ms |
33068 KB |
Output is correct |
2 |
Correct |
36 ms |
32820 KB |
Output is correct |
3 |
Correct |
217 ms |
32984 KB |
Output is correct |
4 |
Correct |
284 ms |
33252 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1097 ms |
35704 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
188 ms |
50176 KB |
Output is correct |
2 |
Execution timed out |
1096 ms |
38708 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1100 ms |
55556 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1095 ms |
36760 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
193 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1098 ms |
39808 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1071 ms |
38892 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |