Submission #1020440

#TimeUsernameProblemLanguageResultExecution timeMemory
1020440BuzzyBeezUntitled (POI11_rot)C++17
0 / 100
180 ms65536 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> vector<int> adj[400008]; ordered_set _list[400008]; long long inv[400008]; void add_edge(int u, int v) {adj[u].push_back(v);} int n, tmp, counter; void input(int id) { cin >> tmp; if (tmp) add_edge(id, tmp), _list[tmp].insert(-tmp); else add_edge(id, ++counter), input(counter); cin >> tmp; if (tmp) add_edge(id, tmp), _list[tmp].insert(-tmp); else add_edge(id, ++counter), input(counter); } void DFS(int u, int p) { int mn_L = -1, mn_R = -1; vector<int> C; for (int v : adj[u]) if (v != p) { // cout << u << " -> " << v << '\n'; if (v > n) DFS(v, u); inv[u] += inv[v]; C.push_back(v); if (C.size() == 1) mn_L = *prev(_list[v].end()); else mn_R = *prev(_list[v].end()); } inv[u] += min(_list[C[1]].order_of_key(mn_L), _list[C[0]].order_of_key(mn_R)); for (int v : adj[u]) if (v != p) { if (_list[u].size() < _list[v].size()) _list[u].swap(_list[v]); for (int item : _list[v]) _list[u].insert(item); } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> tmp; counter = n + 1; input(n + 1); DFS(n + 1, 0); cout << inv[n + 1]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...