# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
743025 | Mauve | 사탕 분배 (IOI21_candies) | C++17 | 196 ms | 15044 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "candies.h"
using namespace std;
#include <bits/stdc++.h>
#define ll long long
int tree[1000000],C[200001];
void update(int node, int l, int r, int L, int R, int val){
if(l>=L && r<=R){
tree[node]=min(tree[node]+val,1000000007);
return;
}
if(l>R || r<L) return;
update(node*2,l,(l+r)/2,L,R,val);
update(node*2+1,(l+r)/2+1,r,L,R,val);
}
int asuu(int node, int l, int r, int pos){
if(l==r) return max(0,min(tree[node],C[pos]));
if(pos<=(l+r)/2) return max(0,min(tree[node]+asuu(node*2,l,(l+r)/2,pos),C[pos]));
else return max(0,min(tree[node]+asuu(node*2+1,(l+r)/2+1,r,pos),C[pos]));
}
vector<int> distribute_candies(vector<int> c, vector<int> l, vector<int> r, vector<int> v){
int n = c.size(),q=l.size(),i,j,ii,jj,k,m;
vector<int> s(n);
for(i=1;i<=n;i++) C[i]=c[i-1];
if(q<=2000){
for(i=0;i<q;i++){
for(j=l[i];j<=r[i];j++){
s[j]+=v[i];
if(s[j]<0) s[j]=0;
if(s[j]>c[j]) s[j]=c[j];
}
}
return s;
}
for(i=0;i<q;i++) update(1,1,n,l[i]+1,r[i]+1,v[i]);
for(i=1;i<=n;i++) s[i-1]=asuu(1,1,n,i);
return s;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |