結果
| 問題 |
No.3265 地元に帰れば天才扱い!
|
| コンテスト | |
| ユーザー |
のらら
|
| 提出日時 | 2025-08-18 01:40:26 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,070 ms / 2,500 ms |
| コード長 | 1,357 bytes |
| コンパイル時間 | 3,776 ms |
| コンパイル使用メモリ | 279,076 KB |
| 実行使用メモリ | 15,700 KB |
| 最終ジャッジ日時 | 2025-09-06 12:34:07 |
| 合計ジャッジ時間 | 29,545 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 21 |
ソースコード
//実験(int->long long)
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m; cin >> n >> m; vector<long long> segtree0(2*m),segtree1(2*m),A(n); vector<long long> 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;
}
}
のらら