Submission #1020497

#TimeUsernameProblemLanguageResultExecution timeMemory
1020497BuzzyBeezUntitled (POI11_rot)C++17
45 / 100
1078 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, timer = 1, id = 1; void Input(){ int x; cin >> x; if(x!=0) {_list[id].insert(x); return;} int t = id; adj[t].push_back(id+1); id++ ; Input(); adj[t].push_back(id+1); id++ ; Input(); } int opt1, opt2; void DFS(int u, int p) { vector<int> C; for (int v : adj[u]) if (v != p) { // cout << u << " -> " << v << endl; if (!adj[v].empty()) DFS(v, u); inv[u] += inv[v]; C.push_back(v); } opt1 = opt2 = 0; if (_list[C[0]].size() < _list[C[1]].size()) swap(C[0], C[1]); tmp = _list[C[1]].size(); for (int v : _list[C[0]]) { tmp = _list[C[1]].order_of_key(v); opt1 += tmp; opt2 += _list[C[1]].size() - tmp; } inv[u] += min(opt1, opt2); 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; Input(); DFS(1, 0); cout << inv[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...