#include "candies.h"
#include<bits/stdc++.h>
#define int long long
#define vi vector<long long>
#define f0r(i,n) for(int i = 0; i<n; i++)
#define mp make_pair
#define pb push_back
#define FOR(i, k, n) for(int i = k; i<n; i++)
#define pii pair<int,int>
#define dout(x) cout<<x<<' '<<#x<<'\n';
#define vout(x) for(auto u : x)cout<<u<<' '; cout<<'\n';
#define vvi vector<vi>
#define vb vector<bool>
using namespace std;
struct rupq{
int n; vi tree;
rupq(int x){
n = x; tree.resize(4 * n + 5);
}
void add(int k, int x){
k += n; tree[k] += x;
for(k/=2; k>=1; k/=2)tree[k] = tree[k * 2] + tree[k*2+1];
}
long long quer(int l, int r){
l += n; r += n; int ret = 0;
while(l <= r){
if(l % 2 == 1)ret += tree[l++];
if(r % 2 == 0)ret += tree[r--]; l/=2; r/=2;
}
return ret;
}
void rangeadd(int l, int r, int x){
add(l, x);
if(r != n-1){
add(r+1, -x);
}
}
long long pointquer(int x){
return quer(0, x);
}
};
std::vector<signed> distribute_candies(std::vector<signed> c, std::vector<signed> l,
std::vector<signed> r, std::vector<signed> v) {
int n = c.size();
vector<signed> ans(n);
int q = l.size();
rupq s = rupq(n);
f0r(i, q){
s.rangeadd(l[i], r[i], v[i]);
}
f0r(i,n){
ans[i] = min((int)c[i], s.pointquer(i));
}
return ans;
}
# | 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... |