結果
問題 |
No.3265 地元に帰れば天才扱い!
|
ユーザー |
|
提出日時 | 2025-09-16 19:46:47 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,791 bytes |
コンパイル時間 | 265 ms |
コンパイル使用メモリ | 12,416 KB |
実行使用メモリ | 11,648 KB |
最終ジャッジ日時 | 2025-09-16 19:46:53 |
合計ジャッジ時間 | 4,869 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | RE * 4 |
other | RE * 21 |
ソースコード
from atcoder.lazysegtree import LazySegTree # 値の2項演算 def op(value1, value2): return [value1[0] + value2[0], value1[1] + value2[1]] # 上のブロックの作用素を下のブロックの値に伝播 def mapping(f, value): return [value[0], value[1] + f * value[0]] # 上のブロックの作用素を下のブロックの作用素に伝播 def composition(f, g): return f + g # 値の単位元 e = [0, 0] # 作用素の単位元 id_ = 0 N, M = map(int, input().split()) Ranges = [[-1, -1, 0] for _ in range(N)] ans = 0 covered = [0] * (M + 1) rates = [0] * (M + 1) Index = [i for i in range(N)] # 区間和取得の場合は[区間のサイズ, 値]として扱う l = [[1, value] for value in covered] l2 = [[1, value] for value in rates] LST = LazySegTree(op, e, mapping, composition, id_, l) B = LazySegTree(op, e, mapping, composition, id_, l2) for i in range(N): a, l, r = map(int, input().split()) Ranges[i][0] = l Ranges[i][1] = r Ranges[i][2] = a LST.apply(l - 1, r, 1) ans += (r - l + 1) * a B.apply(i, i + 1, a) res = 0 for i in range(M): temp = LST.prod(i, i + 1)[1] * B.get(i)[1] res += temp Q = int(input()) answer = [] for _ in range(Q): x, y, u, v = map(int, input().split()) x -= 1 y -= 1 now = Index[x] b = Ranges[x][2] l_past, r_past = Ranges[x][:2] res -= B.prod(l_past - 1, r_past)[1] LST.apply(l_past - 1, r_past, -1) p = LST.get(now)[1] q = LST.get(y)[1] res -= b * p res += b * q B.apply(now, now + 1, -b) B.apply(y, y + 1, b) res += B.prod(u - 1, v)[1] LST.apply(u - 1, v, 1) ans += ((v - u) - (r_past - l_past)) * b Ranges[x][0] = u Ranges[x][1] = v Index[x] = y answer.append(ans - res) print(*answer, sep="\n")