ログイン
新規登録
AtsuoCoder Waseda Tour Finals 2025
読込中…
Home
Tasks
Clar
Submissions
Standings
提出 137272bc-a54d-4e9a-ae1b-baa20865deb2
コード
#include <climits> #include <vector> #include <iostream> using namespace std; using ll = long long; struct LazySeg { int n; vector<ll> seg, lazy; LazySeg(int N) { n = 1; while (n < N) n <<= 1; seg.assign(2 * n, 0); lazy.assign(2 * n, 0); } void build(const vector<ll>& v) { for (int i = 0; i < (int)v.size(); i++) seg[n + i] = v[i]; for (int i = n - 1; i; i--) seg[i] = max(seg[i * 2], seg[i * 2 + 1]); } void push(int k) { if (lazy[k] != 0) { for (int c : {k * 2, k * 2 + 1}) { seg[c] += lazy[k]; lazy[c] += lazy[k]; } lazy[k] = 0; } } void update(int a, int b, ll x, int k, int l, int r) { if (b <= l || r <= a) return; if (a <= l && r <= b) { seg[k] += x; lazy[k] += x; return; } push(k); int m = (l + r) / 2; update(a, b, x, k * 2, l, m); update(a, b, x, k * 2 + 1, m, r); seg[k] = max(seg[k * 2], seg[k * 2 + 1]); } void update(int l, int r, ll x) { update(l, r, x, 1, 0, n); } ll query(int a, int b, int k, int l, int r) { if (b <= l || r <= a) return -LLONG_MAX; if (a <= l && r <= b) return seg[k]; push(k); int m = (l + r) / 2; return max(query(a, b, k * 2, l, m), query(a, b, k * 2 + 1, m, r)); } ll query(int l, int r) { return query(l, r, 1, 0, n); } }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector<ll> H(N); for (int i = 0; i < N; i++) cin >> H[i]; LazySeg seg(N); seg.build(H); int D; cin >> D; while (D--) { int L, R, A, B; ll X; cin >> L >> R >> X >> A >> B; L--; R--; A--; B--; seg.update(L, R + 1, X); cout << seg.query(A, B + 1) << "\n"; } }
結果
問題
点数
言語
結果
実行時間
メモリ
H - Gardening Diary
150
C++
AC
112 ms
13100 KiB