# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1239554 | poat | Distributing Candies (IOI21_candies) | C++17 | 0 ms | 0 KiB |
// #include "candies.h"
#include "grader.cpp"
#include <bits/stdc++.h>
using namespace std;
vector<int> distribute_candies(vector<int> c, vector<int> l, vector<int> r, vector<int> v) {
bool fl = 0;
for(auto i : v)
{
if(i < 0)
fl = 1;
}
int n = c.size(), Q = l.size();
vector<long long> s(n);
if(fl)
{
for(int it = 0; it < Q; it++)
{
for(int i = l[it]; i <= r[it]; i++)
{
s[i] += v[it];
s[i] = max(0ll, s[i]);
s[i] = min(c[i] * 1ll, s[i]);
}
}
}
else
{
int pref[n + 5] = {};
for(int it = 0; it < Q; it++)
{
pref[l[it]] += v[it];
pref[r[it] + 1] -= v[it];
}
for(int i = 0; i < n; i++)
{
pref[i] += (i == 0 ? 0 : pref[i - 1]);
s[i] += pref[i];
s[i] = max(0ll, s[i]);
s[i] = min(c[i] * 1ll, s[i]);
}
}
vector<int> S;
for(auto i : s)
S.push_back(i);
return S;
}