結果
問題 |
No.3265 地元に帰れば天才扱い!
|
ユーザー |
![]() |
提出日時 | 2025-08-09 11:19:22 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
RE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,499 bytes |
コンパイル時間 | 4,416 ms |
コンパイル使用メモリ | 253,960 KB |
実行使用メモリ | 8,320 KB |
最終ジャッジ日時 | 2025-09-06 12:31:36 |
合計ジャッジ時間 | 11,444 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 1 RE * 3 |
other | RE * 21 |
ソースコード
#include <bits/stdc++.h> #include <atcoder/all> using namespace std; using namespace atcoder; using ll = long long; template <typename T> struct Lazy_BIT { int n; vector<T> bit[2]; Lazy_BIT(int n_) { init(n_); } void init(int n_) { n = n_ + 1; for (int p = 0; p < 2; p++) bit[p].assign(n, 0); } void add_sub(int p, int i, T x) { for (int idx = i; idx < n; idx += (idx & -idx)) { bit[p][idx] += x; } } void add(int l, int r, T x) { // [l,r) に加算 add_sub(0, l, -x * (l - 1)); add_sub(0, r, x * (r - 1)); add_sub(1, l, x); add_sub(1, r, -x); } T sum_sub(int p, int i) { T s(0); for (int idx = i; idx > 0; idx -= (idx & -idx)) { s += bit[p][idx]; } return s; } T sum(int i) { return sum_sub(0, i) + sum_sub(1, i) * i; } }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<ll> a(n + 1); for (int i = 1; i <= n; i++) cin >> a[i]; fenwick_tree<ll> b1(n + 1); Lazy_BIT<int> b2(n); for (int i = 1; i <= n; i++) b1.add(i, a[i]); int q; cin >> q; ll ans = 0; while (q--) { int x, l, r; ll y; cin >> x >> y >> l >> r; ans += b1.sum(l, r + 1); b2.add(l, r + 1, 1); ans += (y - a[x]) * (b2.sum(x) - b2.sum(x - 1)); b1.add(x, y - a[x]); a[x] = y; cout << ans << '\n'; } }