結果
| 問題 |
No.1705 Mode of long array
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-04-02 22:26:17 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,288 bytes |
| コンパイル時間 | 436 ms |
| コンパイル使用メモリ | 82,100 KB |
| 実行使用メモリ | 122,284 KB |
| 最終ジャッジ日時 | 2025-04-02 22:26:40 |
| 合計ジャッジ時間 | 20,018 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 WA * 1 |
| other | AC * 24 WA * 27 |
ソースコード
N,M = map(int,input().split())
k = 0
while 2**k<M:
k += 1
K = 2**k # ノード数
T = [[0,0] for _ in range(2*K)]
A = list(map(int,input().split()))
for i in range(M):
T[K+i] = [A[i],i+1]
def update(i,x): # 更新
i += K-1
T[i] = [T[i][0]+x,T[i][1]]
i = i//2
while i>0:
if T[2*i][0]<=T[2*i+1][0]:
T[i] = T[2*i+1]
else:
T[i] = T[2*i]
i //= 2
def find(l,r): # 区間最大値
l += K-1 # 左側の頂点
r += K-1 # 右側の頂点
res = [0,0]
while l<r:
if l&1: # 右子の場合
if res[0]<T[l][0]:
res = T[l]
elif res[0]==T[l][0] and T[l][1]>res[1]:
res = T[l]
l += 1 # 右隣の頂点に移る
if r&1: # &0としたいところだが、この操作は意味ない
r -= 1 # 左隣の頂点に移る
if res[0]<T[r][0]:
res = T[r]
elif res[0]==T[r][0] and T[r][1]>res[1]:
res = T[r]
l >>= 1 # 親に移る
r >>= 1 # 親に移る
return res
Q = int(input())
for _ in range(Q):
t,x,y = map(int,input().split())
if t==1:
update(x,y)
elif t==2:
update(x,-y)
else:
print(find(1,M+1)[1])