#include "candies.h"
#include<bits/stdc++.h>
using namespace std;
const int N = 200010;
long long pref[N][2];
std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l, std::vector<int> r, std::vector<int> v){
int n = c.size(), q = l.size();
for(int i = 0;i < q;i++){
if(v[i] > 0){
pref[l[i]][0] += v[i];
pref[r[i]+1][0] -= v[i];
}
else{
pref[l[i]][1] += v[i];
pref[r[i]+1][1] -= v[i];
}
}
std::vector<int> s;
long long res = 0, plus = 0, neg = 0;
for(int i = 0;i < n;i++){
if(pref[i][0] <= 0){
if(plus >= -pref[i][0]) plus += pref[i][0];
else{
pref[i][0] += plus;
plus = 0;
res += pref[i][0];
if(res < 0){
neg += res;
res = 0;
}
}
}
else{
if(pref[i][0]+res >= c[i]){
long long diff = c[i]-res;
res = c[i];
plus += pref[i][0]-diff;
}
else{
res += pref[i][0];
}
}
if(pref[i][1] >= 0){
if(-neg >= pref[i][1]) neg += pref[i][1];
else{
pref[i][1] += neg;
neg = 0;
res += pref[i][1];
if(res >= c[i]){
plus += res-c[i];
res = c[i];
}
}
}
else{
if(pref[i][1]+res <= 0){
long long diff = res;
res = 0;
neg += pref[i][1]+diff;
}
else{
res += pref[i][1];
}
}
s.push_back(res);
}
return s;
}
# | 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... |