模拟赛爆零了,抑郁了
#include <iostream>
#include <algorithm>
#define int long long
using namespace std;
int a[500005], b[500005], c[500005], w[500005], t[2000005], minn[2000005];
void addd(int l, int r, int n, int x, int y, int v) {
if (l > r) return;
if (l == x && y == r) {t[n] += v, minn[n] += v; return;}
int mid=(l+r)/2;
if (y <= mid) {addd(l, mid, n<<1, x, y, v); minn[n] = min(minn[n<<1], minn[n<<1|1]); return;}
if (x > mid) {addd(mid+1, r, n<<1|1, x, y, v); minn[n] = min(minn[n<<1], minn[n<<1|1]); return;}
addd(l, mid, n<<1, x, mid, v); addd(mid+1, r, n<<1|1, mid+1, y, v); minn[n] = min(minn[n<<1], minn[n<<1|1]);
}
signed main() {
int n, q, summ=0, m; cin>> n; for (int i=1; i<=n; i++) cin>> a[i]; for (int i=1; i<=n; i++) cin >> b[i]; for (int i=1; i<=n; i++) cin>> c[i];
for (int i=n+1; i-->0; ) addd(0, n, 1, i, i, a[i] + summ), summ += b[i]; cin>> q; while (q--) {
cin>> m; for (int i=1; i<=m; i++) cin >> w[i], addd(0, n, 1, w[i], n, c[w[i]]), addd(0, n, 1, 0, w[i]-1, -b[w[i]]); cout << minn[1] << endl; for (int i=1; i<=m; i++) addd(0, n, 1, w[i], n, -c[w[i]]), addd(0, n, 1, 0, w[i]-1, b[w[i]]);
}
}