結果
問題 |
No.3265 地元に帰れば天才扱い!
|
ユーザー |
![]() |
提出日時 | 2025-08-18 10:32:31 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,354 ms / 2,500 ms |
コード長 | 2,316 bytes |
コンパイル時間 | 301 ms |
コンパイル使用メモリ | 82,356 KB |
実行使用メモリ | 90,076 KB |
最終ジャッジ日時 | 2025-09-06 12:35:16 |
合計ジャッジ時間 | 31,336 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 21 |
ソースコード
# この提出と#1113669はC++からPythonにChatGPTを使って変換したものです。 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()) 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 print(res) if __name__ == "__main__": main()