Submission #1020634

#TimeUsernameProblemLanguageResultExecution timeMemory
1020634quannnguyen2009Untitled (POI11_rot)C++14
72 / 100
107 ms65536 KiB
#include<bits/stdc++.h> #define int long long #define fi first #define se second #define pb push_back #define ii pair<int, int> #define sz(v) (int)v.size() #define all(v) v.begin(), v.end() using namespace std; const int N=400005; int sum[4000005],ls[4000005],rs[4000005]; int root[N],l[N],r[N],val[N]; int ans,s1,s2; int cnt,n,seg; void init(int ro) { cin >> val[ro]; if (!val[ro]){ l[ro]=++cnt; init(l[ro]); r[ro]=++cnt; init(r[ro]); } } void pushup(int rt) { sum[rt]=sum[ls[rt]]+sum[rs[rt]]; } void build(int l,int r,int &rt,int key) { if (!rt)rt=++seg; if (l==r){sum[rt]++;return;} int mid=(l+r)>>1; if (key<=mid)build(l,mid,ls[rt],key); else build(mid+1,r,rs[rt],key); pushup(rt); } int merge(int r1,int r2) { if (!r1 || !r2)return r1+r2; s1+=(int)sum[rs[r1]]*sum[ls[r2]]; s2+=(int)sum[ls[r1]]*sum[rs[r2]]; ls[r1]=merge(ls[r1],ls[r2]); rs[r1]=merge(rs[r1],rs[r2]); pushup(r1); return r1; } void solve(int ro) { if (!ro)return; solve(l[ro]);solve(r[ro]); if (!val[ro]){ s1=s2=0; root[ro]=merge(root[l[ro]],root[r[ro]]); ans+=min(s1,s2); } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; cnt=1; init(1); for (int i=1;i<=cnt;++i) { if (val[i]) build(1,n,root[i],val[i]); } solve(1); cout << ans; }
#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...