# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1242458 | nibert | Distributing Candies (IOI21_candies) | C++20 | 0 ms | 0 KiB |
#include <vector>
#include <algorithm>
using namespace std;
vector<long long> distribute_candies(vector<long long> c, vector<long long> l, vector<long long> r, vector<long long> v){
int n = c.size(), q = r.size();
vector<long long> prefix(n);
for (int i =0; i < q; i++){
long long left = l[i], right = r[i], val = v[i];
if (v[i] > 0){
prefix[left] += val;
if (right + 1 < n) prefix[right + 1] -= val;
} else {
prefix[left] -= val;
if (right + 1 < n) prefix[right + 1] += val;
}
}
for (int i = 1; i < n; i++) {
prefix[i] += prefix[i - 1];
}
for (int i =0; i< n; i++)
prefix[i] = min(c[i], max(0LL, prefix[i]));
return prefix;
}