Submission #1020635

#TimeUsernameProblemLanguageResultExecution timeMemory
1020635quannnguyen2009Untitled (POI11_rot)C++14
100 / 100
167 ms55360 KiB
#include<iostream> #include<cstdio> using namespace std; const int N=400005; int sum[4000005],ls[4000005],rs[4000005]; int root[N],l[N],r[N],val[N]; long long ans,s1,s2; int cnt,n,seg; void init(int ro){ scanf ("%d",&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+=(long long)sum[rs[r1]]*sum[ls[r2]]; s2+=(long long)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); } } int main (){ scanf ("%d",&n);cnt=1; init(1); for (int i=1;i<=cnt;++i) if (val[i])build(1,n,root[i],val[i]); solve(1); printf ("%lld",ans); return 0; }

Compilation message (stderr)

rot.cpp: In function 'void init(int)':
rot.cpp:10:11: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 |     scanf ("%d",&val[ro]);
      |     ~~~~~~^~~~~~~~~~~~~~~
rot.cpp: In function 'int main()':
rot.cpp:48:11: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |     scanf ("%d",&n);cnt=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...