#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#include "candies.h"
#define ll long long
vector<int> distribute_candies(vector<int> C, vector<int> l, vector<int> r, vector<int> v){
vector<int> tmpv = v;
v.assign(1, 0);
int indx = 0;
while(indx<tmpv.size() && tmpv[indx]<0) indx++;
for(int i = indx; i<tmpv.size(); i++) v.push_back(tmpv[i]);
int n = v.size();
vector<ll> pref(n, v[0]);
vector<pair<ll, ll>> b(n, pair<ll, ll>()), s(n, pair<ll, ll>());
for(int i = 1; i<n; i++) pref[i] = pref[i-1] + v[i];
b[n-1] = {pref[n-1], n-1};
s[n-1] = {pref[n-1], n-1};
for(int i = n-2; i>=0; i--){
b[i] = max(b[i+1], {pref[i], i});
s[i] = min(s[i+1], {pref[i], i});
}
vector<int> ans;
for(int i = 0; i<C.size(); i++){
ll c = C[i];
if(b[0].first <= c && s[0].first >= 0) {
ans.push_back(pref[n-1]);
continue;
}
ll le = 0, ri = n-1;
while(le<ri){
ll mid = (le+ri+1)/2;
if(b[mid].first - s[mid].first >= c) le = mid;
else ri = mid-1;
}
if(b[le].first - s[le].first >= c){
if(b[le].second > s[le].second) ans.push_back(c + (int)((ll)pref[n-1] - (ll)pref[b[le].second]));
else ans.push_back((ll)pref[n-1] - (ll)pref[s[le].second]);
continue;
}
ans.push_back(pref[n-1] - pref[s[le].second]);
}
return ans;
}