Submission #834654

#TimeUsernameProblemLanguageResultExecution timeMemory
834654Mohmad_Zaid사탕 분배 (IOI21_candies)C++17
0 / 100
136 ms14240 KiB
#include "candies.h" #include <vector> using namespace std; struct segtree{ int size=1; vector<int>arr; void init(int n){ while(size<n)size*=2; arr.assign(2*size,0LL); } void update(int l,int r,int x,int lx,int rx,int v){ if(lx>=r || rx<=l)return; if(lx>=l && rx<=r){ arr[x]+=v; return; } int mid=(lx+rx)/2; update(l,r,2*x+1,lx,mid,v); update(l,r,2*x+2,mid,rx,v); } void update(int l,int r,int v){ update(l,r,0,0,size,v); } void get_ans(int i,int x,int lx,int rx,int& ans){ if(lx>i || rx<=i)return; if(rx-lx==1){ if(lx==i)ans+=arr[x]; return; } if(lx<=i && rx>i){ ans+=arr[x]; } int mid=(lx+rx)/2; if(i<mid)get_ans(i,2*x+1,lx,mid,ans); else get_ans(i,2*x+2,mid,rx,ans); } void get_ans(int i,int& ans){ get_ans(i,0,0,size,ans); } }; vector<int> distribute_candies(vector<int> c, vector<int> l,vector<int> r, vector<int> v) { int n = c.size(); int q=l.size(); vector<int> s(n); segtree st; st.init(n); for(int i=0;i<q;i++){ st.update(l[i],r[i]+1,v[i]); } for(int i=0;i<n;i++){ int val=0; st.get_ans(i,val); s[i]=min(c[i],val); } return s; }
#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...