結果
| 問題 |
No.875 Range Mindex Query
|
| コンテスト | |
| ユーザー |
nephrologist
|
| 提出日時 | 2020-05-06 21:12:38 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,274 bytes |
| コンパイル時間 | 534 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 27,324 KB |
| 最終ジャッジ日時 | 2024-07-03 09:07:26 |
| 合計ジャッジ時間 | 15,370 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | WA * 18 |
ソースコード
n, q = map(int, input().split())
A = list(map(int, input().split()))
infi = 10 ** 20
def func(pair1, pair2):
idx1, val1 = pair1
idx2, val2 = pair2
if val1 < val2:
res = pair1
else:
res = pair2
return res
class SegmentTree:
# 1-index
def __init__(self, A: list, ele, func): # Aは0-idx
self.A = A
self.ele = ele
self.func = func
self.n = len(self.A)
self.num = 2 ** ((n - 1).bit_length())
self.SEG = [self.ele] * (2 * self.num)
# self.LAZY=[ele]*(2*num)
def search(self, idx):
return self.SEG[idx + self.num - 1]
def initialize(self):
for i in range(self.n):
self.SEG[i + self.num] = (i + 1, self.A[i])
for i in range(self.num - 1, 0, -1):
self.SEG[i] = self.func(self.SEG[2 * i], self.SEG[2 * i + 1])
def update(self, idx, val): # 1-idx
idx += self.num - 1
self.SEG[idx] = val
idx //= 2
while idx:
self.SEG[idx] = self.func(self.SEG[2 * idx], self.SEG[2 * idx + 1])
idx //= 2
# def delay(self,):
def query(self, left, right):
# maspy式。開区間のママ処理する
# left, rightで値を分けているのは交換法則不成立のときのため
# 開区間→Rが奇数→右端が偶数→1ずらしてから計算
# 下から上への遷移は2で割る
# juppy氏は閉区間に直していた
resleft = self.ele
resright = self.ele
left += self.num
right += self.num
while right - left > 0:
if left % 2 == 1:
resleft = self.func(resleft, self.SEG[left])
left += 1
if right % 2 == 1:
right -= 1
resright = self.func(resright, self.SEG[right])
left //= 2
right //= 2
return self.func(resleft, resright)[0]
ST = SegmentTree(A, (-1, infi), func)
ST.initialize()
for _ in range(q):
a, l, r = map(int, input().split())
if a == 1:
lidx, lval = ST.search(l)
ridx, rval = ST.search(r)
ST.update(ridx, (ridx, lval))
ST.update(lidx, (lidx, rval))
else:
print(ST.query(l, r + 1))
nephrologist