結果
問題 |
No.3265 地元に帰れば天才扱い!
|
ユーザー |
![]() |
提出日時 | 2025-08-18 10:30:21 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 718 ms / 2,500 ms |
コード長 | 2,329 bytes |
コンパイル時間 | 501 ms |
コンパイル使用メモリ | 82,300 KB |
実行使用メモリ | 112,396 KB |
最終ジャッジ日時 | 2025-09-06 12:34:34 |
合計ジャッジ時間 | 19,549 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 21 |
ソースコード
import sys input = sys.stdin.buffer.readline def main(): n, m = map(int, input().split()) segtree0 = [0] * (2 * m) segtree1 = [0] * (2 * m) A = [0] * n L = [0] * n R = [0] * n C = [0] * n res = 0 for i in range(n): a, l, r = map(int, input().split()) A[i] = a L[i] = l - 1 R[i] = r segtree1[m + i] = a res += (R[i] - L[i]) * a C[i] = i l += m - 1 r += m while l < r: if l & 1: segtree0[l] += 1 l += 1 if r & 1: r -= 1 segtree0[r] += 1 l >>= 1 r >>= 1 for i in range(m - 1, 0, -1): segtree1[i] = segtree1[i << 1] + segtree1[i << 1 | 1] for i in range(n): l = m + L[i] r = m + R[i] while l < r: if l & 1: res -= segtree1[l] l += 1 if r & 1: r -= 1 res -= segtree1[r] l >>= 1 r >>= 1 q = int(input()) out = [] for _ in range(q): x, y, u, v = map(int, input().split()) i = x - 1 res -= (R[i] - L[i]) * A[i] l = m + C[i] while l: res += segtree0[l] * A[i] segtree1[l] -= A[i] l >>= 1 l, r = m + L[i], m + R[i] while l < r: if l & 1: segtree0[l] -= 1 res += segtree1[l] l += 1 if r & 1: r -= 1 segtree0[r] -= 1 res += segtree1[r] l >>= 1 r >>= 1 C[i] = y - 1 L[i] = u - 1 R[i] = v res += (R[i] - L[i]) * A[i] l = m + C[i] while l: res -= segtree0[l] * A[i] segtree1[l] += A[i] l >>= 1 l, r = m + L[i], m + R[i] while l < r: if l & 1: segtree0[l] += 1 res -= segtree1[l] l += 1 if r & 1: r -= 1 segtree0[r] += 1 res -= segtree1[r] l >>= 1 r >>= 1 out.append(str(res)) sys.stdout.write("\n".join(out)) if __name__ == "__main__": main()