#include <bits/stdc++.h>
using namespace std;
namespace fast_io {
int read() {
int x = 0, f = 0; char ch = getchar();
while (!isdigit(ch)) f |= ch == '-', ch = getchar();
while (isdigit(ch)) x = 10 * x + ch - '0', ch = getchar();
return f ? -x : x;
}
void read(int& x) {x = read();}
template<typename T> void print(T x) {
if (x < 0) putchar('-'), x = -x;
if (x >= 10) print(x / 10);
putchar(x % 10 + '0');
}
template<typename T> void print(T x, char let) {
print(x), putchar(let);
}
}
using namespace fast_io;
const int N = 1e6 + 5;
using ll = long long;
ll b[N], p[N], u[N], bb[N], pp[N], d[N];
int n;
vector<int> stk;
ll a[N], ans;
int main() {
#ifdef LOCAL
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
read(n);
for(int i = 1;i<=n;++i) b[i] = read(), bb[i] = b[i];
for(int i = 1;i<n;++i) p[i] = read();
for(int i = 1;i<n;++i) u[i] = read();
for(int i = 1;i<n;++i) {
pp[i] = p[i] - u[i];
assert(pp[i]>=0);
int tmp = min(pp[i], bb[i]);
bb[i] -= tmp;
pp[i] -= tmp;
if(bb[i + 1] < pp[i]) {
puts("NO");
return 0;
}
bb[i + 1] -= pp[i];
}
puts("YES");
for(int i = 1;i<=n;++i) pp[i] = p[i], bb[i] = 0;
for(int i = 1;i<n;++i) {
int tmp = min(pp[i], b[i]);
stk.push_back(i);
b[i] -= tmp;
pp[i] -= tmp;
a[i] = tmp;
while(b[i + 1] < pp[i]) {
int x = stk.back();
ll val = min(u[x], pp[i] - b[i + 1]);
d[x + 1] += val;
d[i + 1] -= val;
u[x] -= val;
if(u[x] == 0) stk.pop_back();
pp[i] -= val;
bb[x] += val;
ans += val;
}
b[i + 1] -= pp[i];
u[i] = min(u[i], pp[i]);
}
print(ans, '\n');
for(int i = 1;i<n;++i) {
d[i] += d[i - 1];
a[i] += d[i];
print(a[i], ' ');
print(bb[i], ' ');
print(p[i] - a[i] - bb[i], '\n');
}
return 0;
}
# | 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... |