Submission #1020412

#TimeUsernameProblemLanguageResultExecution timeMemory
1020412nathan4690Untitled (POI11_rot)C++17
0 / 100
44 ms65536 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define ll long long #define pll ll #define ld long double #define el cout << '\n' #define f1(i,n) for(ll i=1;i<=n;i++) #define __file_name "" using namespace std; using namespace __gnu_pbds; #define ordered_set tree<pll, null_type, less<pll>, rb_tree_tag, tree_order_statistics_node_update> using namespace std; const ll maxn = 1e6+5, inf=1e18; ll n,a[maxn]; vector<ll> G[maxn]; ordered_set values[maxn]; ll dfs(ll u, ll p){ if(a[u]){ // cout << u << ' ' << a[u];el; values[u].insert(a[u]); return 0; } ll resp = 0; ll le = 0, ri = 0; for(ll c: G[u]){ if(c != p){ resp += dfs(c, u); if(le == 0) le = c; else ri = c; } } if(values[ri].size() < values[le].size()) swap(values[ri], values[le]); // le < ri ll res1 = 0, res2 = 0; // res1: count inversion if le comes before ri // res2: count inversions if le comes after ri for(auto item: values[le]){ res1 += values[ri].order_of_key(item); res2 += values[ri].size() - values[ri].order_of_key(item+1); } // cout << u << ' ' << res1 << ' ' << res2;el; for(ll c: G[u]){ if(c != p){ if(values[c].size() > values[u].size()) values[u].swap(values[c]); for(auto item: values[c]){ values[u].insert(item); } } } return resp + min(res1, res2); } ll timer = 0; ll readInput(){ ll v; cin >> v; ll myval = timer; timer++; if(v){ a[myval] = v; }else{ ll c1 = readInput(), c2 = readInput(); G[c1].push_back(myval); G[myval].push_back(c1); G[c2].push_back(myval); G[myval].push_back(c2); } return myval; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); if(fopen(__file_name ".inp", "r")){ freopen(__file_name ".inp","r",stdin); freopen(__file_name ".out","w",stdout); } // code here cin >> n; timer = 1; ll root = readInput(); cout << dfs(root, 0); return 0; } /* Code by: Nguyen Viet Trung Nhan Cau Giay Secondary School */

Compilation message (stderr)

rot.cpp: In function 'int main()':
rot.cpp:78:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   78 |         freopen(__file_name ".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rot.cpp:79:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   79 |         freopen(__file_name ".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...