//遅延評価セグ木1本で解いてみる #include #include #include using namespace std; using namespace atcoder; using ll = long long; ll N, Q, X, Y, L, R; struct S { ll val; ll total; ll deg; }; using F = ll; S op(S x,S y){ return S{x.val + y.val, x.total + y.total, max(x.deg, y.deg)}; } S e() { return S{0LL, 0LL, 0LL}; } S mapping(F f, S x) { return S{x.val, f * x.val + x.total, f + x.deg}; } F composition(F f, F g) { return f + g; } F id() { return 0LL; } int main(){ cin >> N; vector A(N); for(int i = 0; i < N; i++){ ll a; cin >> a; A[i] = S{a, 0, 0}; } lazy_segtree seg(A); cin >> Q; for(int q = 1; q <= Q; q++){ cin >> X >> Y >> L >> R; X--; L--; auto [val, total, deg] = seg.get(X); seg.set(X, S{Y, Y * deg, deg}); seg.apply(L, R, 1LL); cout << seg.prod(0, N).total << endl; } return 0; }