Submission #1048223

#TimeUsernameProblemLanguageResultExecution timeMemory
1048223vjudge1Distributing Candies (IOI21_candies)C++17
100 / 100
182 ms38364 KiB
#include "candies.h" #include<bits/stdc++.h> using namespace std; typedef vector<int> VI; int C,Kof[200100]; VI ans; struct segtree{ struct DATA{ long long prfmn,prfmx,sum; DATA(long long k){ prfmn=min(0ll,k), prfmx=max(0ll,k),sum=k; } DATA(){ prfmn=prfmx=sum=0; } DATA(DATA a,DATA b){ sum=a.sum+b.sum; prfmn=min(a.prfmn,b.prfmn+a.sum); prfmx=max(a.prfmx,b.prfmx+a.sum); } } T[1<<19]; void Add(int i,int l,int r,int p,int v){ if(l==r) return void(T[i]=DATA(T[i].sum+v)); if(l+r>>1>=p) Add(i*2,l,l+r>>1,p,v); else Add(i*2+1,l+r+2>>1,r,p,v); T[i]=DATA(T[i*2],T[i*2+1]); } int getans(DATA k,int b){ return (b?k.prfmx>C:k.prfmn>=-C)?C+k.sum-k.prfmx:k.sum-k.prfmn; } int Qry(int i,int l,int r,DATA prv){ if(l==r) return getans(DATA(T[i],prv),T[i].sum>=0); DATA c=DATA(T[i*2+1],prv); if(c.prfmx-c.prfmn<=C) return Qry(i*2,l,l+r>>1,c); return Qry(i*2+1,l+r+2>>1,r,prv); } } seg; vector<pair<int,int>> stuf[200100]; VI distribute_candies(VI c,VI l,VI r,VI v) { int n=c.size(),q=l.size(); for(int i=0;i<q;i++) stuf[l[i]].push_back({i+1,v[i]}), stuf[r[i]+1].push_back({i+1,-v[i]}); for(int i=0;i<n;i++){ for(auto[a,b]:stuf[i]) seg.Add(1,0,q,a,b); C=c[i]; ans.push_back(seg.Qry(1,0,q,seg.T[0])); } return ans; }

Compilation message (stderr)

candies.cpp: In member function 'void segtree::Add(int, int, int, int, int)':
candies.cpp:25:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   25 |         if(l+r>>1>=p) Add(i*2,l,l+r>>1,p,v);
      |            ~^~
candies.cpp:25:34: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   25 |         if(l+r>>1>=p) Add(i*2,l,l+r>>1,p,v);
      |                                 ~^~
candies.cpp:26:27: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   26 |         else Add(i*2+1,l+r+2>>1,r,p,v);
      |                        ~~~^~
candies.cpp: In member function 'int segtree::Qry(int, int, int, segtree::DATA)':
candies.cpp:36:31: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   36 |             return Qry(i*2,l,l+r>>1,c);
      |                              ~^~
candies.cpp:37:29: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   37 |         return Qry(i*2+1,l+r+2>>1,r,prv);
      |                          ~~~^~
#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...