Submission #1088803

#TimeUsernameProblemLanguageResultExecution timeMemory
1088803coldbr3wUntitled (POI11_rot)C++17
100 / 100
212 ms48980 KiB
//#pragma GCC optimize("O3","unroll-loops") #include<bits/stdc++.h> #define all(x) (x).begin() , (x).end() #define pll pair<long long, long long> #define pii pair<int , int> #define fi first #define se second #define bit(i,j) ((j >> i) & 1) using namespace std; const long long inf = 1e18+1; const int mod = 1e9+7; const int MAXN = 1e6+100; #define int long long int bit[MAXN] , n; void upd(int x , int val){ while(x <= n){ bit[x] += val; x += (x & (-x)); } } int get(int x){ int res = 0; while(x > 0){ res += bit[x]; x -= (x & (-x)); } return res; } vector<int> adj[MAXN]; int id = 1 , c[MAXN] , sz[MAXN]; void Input(){ int x; cin >> x; c[id] = x; if(x!=0) return; int t = id; adj[t].push_back(id+1); id++ ; Input(); adj[t].push_back(id+1); id++ ; Input(); } void dfs_sz(int u){ sz[u] = 1; for(auto v : adj[u]) dfs_sz(v) , sz[u] += sz[v]; } void modify(int u , int val){ if(adj[u].size() == 0){ upd(c[u] , val); return; } for(auto v : adj[u]) modify(v , val); } int cnt1 = 0 , cnt2 = 0; void cal(int u){ if(adj[u].size() == 0){ cnt1 += get(c[u] - 1); cnt2 += get(n) - get(c[u]); return; } for(auto v : adj[u]) cal(v); } int ans[MAXN]; void dfs(int u){ if(adj[u].size() == 0){ upd(c[u] , 1); return; } int bc = (sz[adj[u][0]] > sz[adj[u][1]] ? 0 : 1); int sc = bc ^ 1; bc = adj[u][bc]; sc = adj[u][sc]; dfs(sc); modify(sc , -1); dfs(bc); cnt1 = cnt2 = 0; cal(sc); modify(sc , 1); ans[u] = ans[bc] + ans[sc] + min(cnt1 , cnt2); } int32_t main(){ //freopen("TRAVEL.INP", "r", stdin); //freopen("Nowruz.out", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; Input(); dfs_sz(1); dfs(1); cout << ans[1] << "\n"; return 0; }
#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...