結果
問題 | No.875 Range Mindex Query |
ユーザー |
![]() |
提出日時 | 2019-09-07 18:48:25 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,369 ms / 2,000 ms |
コード長 | 1,177 bytes |
コンパイル時間 | 143 ms |
コンパイル使用メモリ | 82,248 KB |
実行使用メモリ | 168,344 KB |
最終ジャッジ日時 | 2024-06-27 00:56:51 |
合計ジャッジ時間 | 10,644 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 18 |
ソースコード
N, Q = map(int,input().split())A = list(map(int,input().split()))queries = [[int(e)-1 for e in input().split()] for _ in range(Q)]# N: 処理する区間の長さN0 = 2**(N-1).bit_length()INF = 2**31-1data = [[INF,-1] for _ in range(2*N0)]# a_k の値を x に更新def update(k, x):data[k+N0-1] = [x, k]k += N0-1while k >= 0:k = (k - 1) // 2if data[2*k+1] < data[2*k+2]:data[k] = data[2*k+1][:]else:data[k] = data[2*k+2][:]# 区間[l, r)の(最小値, インデックス)def query(l, r):L = l + N0; R = r + N0s = [INF,-1]while L < R:if R & 1:R -= 1if s > data[R-1]:s = data[R-1]if L & 1:if s > data[L-1]:s = data[L-1]L += 1L >>= 1; R >>= 1return s# 配列の初期化for i, a in enumerate(A):update(i, a)def solve(q, l, r):if q == 0:al, li = query(l, l+1)ar, ri = query(r, r+1)update(l, ar)update(r, al)elif q == 1:m, i = query(l,r+1)print(i+1)for q, l, r in queries:solve(q, l, r)