結果
| 問題 |
No.865 24時間降水量
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-08-17 00:20:32 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,465 ms / 2,000 ms |
| コード長 | 1,107 bytes |
| コンパイル時間 | 359 ms |
| コンパイル使用メモリ | 82,336 KB |
| 実行使用メモリ | 121,956 KB |
| 最終ジャッジ日時 | 2024-09-23 05:24:14 |
| 合計ジャッジ時間 | 7,182 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 18 |
ソースコード
import sys
input = sys.stdin.readline
# k番目の要素の値をxに変更
def update(k, x):
k += N0-1
data[k] = x
while k >= 0:
k = (k - 1) // 2
data[k] = max(data[2*k+1], data[2*k+2])
# 区間[l, r)の最小値を求める
def query(l, r):
L = l + N0; R = r + N0
s = -INF
# 区間を列挙しながら最小値を求める
while L < R:
if R & 1:
R -= 1
s = max(s, data[R-1])
if L & 1:
s = max(s, data[L-1])
L += 1
L >>= 1; R >>= 1
return s
N = int(input())
A = list(map(int, input().split()))
B = [sum(A[0:24])]
for i in range(1, N-23):
B.append(B[-1] + A[i+23] - A[i-1])
M = len(B)
# Range Minimum Query
N0 = 2**(M-1).bit_length()
INF = 2**31-1
# 0-indexedで管理
data = [-INF]*(2*N0)
for i in range(M):
update(i, B[i])
Q = int(input())
for _ in range(Q):
Ti, Vi = map(int, input().split())
Ti -= 1
for i in range(max(Ti-23, 0), min(Ti+1, M)):
update(i, B[i]-A[Ti]+Vi)
B[i] = B[i] - A[Ti] + Vi
A[Ti] = Vi
print(query(0, M))