結果
問題 |
No.3265 地元に帰れば天才扱い!
|
ユーザー |
![]() |
提出日時 | 2025-08-18 08:17:44 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 670 ms / 2,500 ms |
コード長 | 1,368 bytes |
コンパイル時間 | 2,063 ms |
コンパイル使用メモリ | 198,868 KB |
実行使用メモリ | 13,540 KB |
最終ジャッジ日時 | 2025-09-06 12:34:12 |
合計ジャッジ時間 | 20,278 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 21 |
ソースコード
#include <bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(false),cin.tie(0); int n,m; cin >> n >> m; vector<long long> segtree0(2*m),segtree1(2*m),A(n); vector<int> L(n),R(n),C(n); long long res(0); for (int i(0);i < n;++i){ cin >> A[i] >> L[i] >> R[i]; --L[i],segtree1[m+i] = A[i],res += (R[i]-L[i])*A[i],C[i] = i; for (int l(m+L[i]),r(m+R[i]);l < r;l>>=1,r>>=1){ if (l&1) ++segtree0[l++]; if (r&1) ++segtree0[--r]; } } for (int i(m-1);i;--i) segtree1[i] = segtree1[i<<1]+segtree1[i<<1|1]; for (int i(0);i < n;++i) for (int l(m+L[i]),r(m+R[i]);l < r;l>>=1,r>>=1){ if (l&1) res -= segtree1[l++]; if (r&1) res -= segtree1[--r]; } int q; cin >> q; while(q--){ int i; cin >> i; --i,res -= (R[i]-L[i])*A[i]; for (int l(m+C[i]);l;l>>=1) res += segtree0[l]*A[i],segtree1[l] -= A[i]; for (int l(m+L[i]),r(m+R[i]);l < r;l>>=1,r>>=1){ if (l&1) --segtree0[l],res += segtree1[l],++l; if (r&1) --r,--segtree0[r],res += segtree1[r]; } cin >> C[i] >> L[i] >> R[i]; --C[i],--L[i],res += (R[i]-L[i])*A[i]; for (int l(m+C[i]);l;l>>=1) res -= segtree0[l]*A[i],segtree1[l] += A[i]; for (int l(m+L[i]),r(m+R[i]);l < r;l>>=1,r>>=1){ if (l&1) ++segtree0[l],res -= segtree1[l],++l; if (r&1) --r,++segtree0[r],res -= segtree1[r]; } cout << res << endl; } }