#include <iostream>
#include <vector>
using namespace std;
const int N = 1<<18;
long long Pre[N], Mn[N], Mx[N], Mx1[N], Mn1[N];
vector<int> distribute_candies(vector<int> c, vector<int> l, vector<int> r, vector<int> v){
int n = c.size(), q = l.size();
for (int i=1;i<=q;i++)
Pre[i] = Pre[i-1] + v[i-1];
Mn1[q+1] = Pre[q];
for (int i=q;i>=0;i--){
Mx1[i] = max(Pre[i], Mx1[i+1]);
Mn1[i] = min(Pre[i], Mn1[i+1]);
Mx[i] = max(Mx1[i] - Pre[i], Mx[i+1]);
}
vector<int> ans;
for (int i=0;i<n;i++){
int l = -1, r = q;
while (l + 1 < r){
int m = (l + r) / 2;
if (Mx[m] >= c[i])
l = m;
else
r = m;
}
if (l == -1)
ans.push_back(Pre[q] - Mn1[0]);
else{
int l1 = l + 1, r1 = q+1;
while (l1 + 1 < r1){
int m = (l1 + r1) / 2;
if (Mx1[m] < Mx1[l])
r1 = m;
else
l1 = m;
}
// cout<<i<<' '<<l<<' '<<l1<<' '<<r1<<' '<<endl;
if (Pre[l1] - Mn1[l1 + 1] >= c[i])
ans.push_back(Pre[q] - Mn1[l1 + 1]);//, cout<<i<<endl;
else
ans.push_back(c[i] + Pre[q] - Pre[l1]);
}
}
return ans;
}