제출 #834656

#제출 시각아이디문제언어결과실행 시간메모리
834656Mohmad_Zaid사탕 분배 (IOI21_candies)C++17
8 / 100
157 ms15532 KiB
#include "candies.h" #include <bits/stdc++.h> #define ll long long using namespace std; struct segtree{ int size=1; vector<ll>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,ll& 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,ll& 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++){ ll val=0; st.get_ans(i,val); if(val>INT_MAX){ s[i]=c[i]; }else{ s[i]=min(c[i],(int)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...