Submission #931056

#TimeUsernameProblemLanguageResultExecution timeMemory
931056vjudge1Untitled (POI11_rot)C++17
100 / 100
743 ms33016 KiB
//gm --- akezhon #include <bits/stdc++.h> //#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #define int long long #define pb push_back #define F first #define S second #define all(v) v.begin(),v.end() #define pii pair<int,int> #define tm (tl+tr)/2 #define TL v+v, tl, tm #define TR v+v+1, tm+1, tr #define DA l <= tl && tr <= r #define NET r < tl || tr < l #define double long double using namespace std; const int N=2e6+7; const int inf=1e9; int c[N], tin[N], tout[N], eul[N], sz[N], t[N*4], l[N], r[N], szz, a, b; vector <pair<int*, int>> rb; int n, timer, ans; void roll(int &x){ rb.push_back({&x, x}); } void tupd(int pos, int val, int v=1, int tl=1, int tr=n){ // roll(t[v]); if(tl == tr){ t[v] = val; return; } if(pos <= tm)tupd(pos, val, TL); else tupd(pos, val, TR); t[v] = t[v+v] + t[v+v+1]; } int get(int l, int r, int v=1, int tl=1, int tr=n){ if(NET)return 0; if(DA)return t[v]; return get(l, r, TL) + get(l, r, TR); } void calc(int v){ if(c[v]){ a += get(1, c[v]-1); b += get(c[v]+1, n); }else{ calc(l[v]); calc(r[v]); } } void add(int v, int x){ if(c[v]){ tupd(c[v], x); }else{ add(l[v], x); add(r[v], x); } } void go(int v=1, int cl=0){ if(c[v]){ if(cl==0)tupd(c[v], 1); return; } if(sz[l[v]] > sz[r[v]]){ swap(l[v], r[v]); } go(l[v], 1); go(r[v], 0); a=0, b=0; calc(l[v]); ans += min(a, b); if(cl)add(r[v], 0); else add(l[v], 1); } void rec(){ cin >> c[szz]; if(c[szz]){ sz[szz] = 1; } else{ int v = szz; l[v] = ++szz; rec(); sz[v] += sz[l[v]]; r[v] = ++szz; rec(); sz[v] += sz[r[v]]; } } void AlemAmenov(){ cin >> n; szz=1; rec(); go(); cout << ans; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); // freopen("promote.in", "r", stdin); // freopen("promote.out", "w", stdout); int RealName=1; // cin >> RealName; // int C=0; while(RealName--){ // cout << "Case " << ++C << ":\n"; AlemAmenov(); } 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...