結果
問題 | No.1000 Point Add and Array Add |
ユーザー |
![]() |
提出日時 | 2025-04-22 08:33:33 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 90 ms / 2,000 ms |
コード長 | 1,274 bytes |
コンパイル時間 | 1,951 ms |
コンパイル使用メモリ | 198,476 KB |
実行使用メモリ | 12,672 KB |
最終ジャッジ日時 | 2025-04-22 08:33:39 |
合計ジャッジ時間 | 5,953 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 22 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define int ll #define fast_io cin.tie(0)->sync_with_stdio(0); #define endl '\n' typedef long long ll; struct Bit { int n; vector<int> bit; Bit(int _n) : n(_n), bit(n + 1) {} void add(int i, int x) { for (i++ ; i <= n; i += i & -i) { bit[i] += x; } } void add(int l, int r, int x) { add(l, x); add(r + 1, -x); } int sum(int i) { int ret = 0; for (i++; i; i -= i & -i) { ret += bit[i]; } return ret; } }; int32_t main() { fast_io; int n, q; cin >> n >> q; vector<int> a(n); for (auto &i : a) cin >> i; vector<tuple<int, int, int>> queries(q); for (auto &[t, l, r] : queries) { char x; cin >> x; t = x == 'B'; cin >> l >> r; } reverse(queries.begin(), queries.end()); vector<int> b(n); Bit bit(n); for (auto [t, l, r] : queries) { if (t) { --l, --r; bit.add(l, r, 1); } else { int i = l - 1, x = r; b[i] += x * bit.sum(i); } } for (int i = 0; i < n; i++) { b[i] += a[i] * bit.sum(i); cout << b[i] << " \n"[i == n - 1]; } }