結果
問題 | No.875 Range Mindex Query |
ユーザー |
|
提出日時 | 2021-03-02 11:27:41 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 1,710 ms / 2,000 ms |
コード長 | 1,787 bytes |
コンパイル時間 | 278 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 20,636 KB |
最終ジャッジ日時 | 2024-10-03 01:37:44 |
合計ジャッジ時間 | 13,572 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 18 |
ソースコード
import sysinput = sys.stdin.buffer.readlineclass SegmentTree:"""https://qiita.com/dn6049949/items/afa12d5d079f518de368 から拝借しています。"""def __init__(self, size, f=lambda x, y: min(x, y), default=10 ** 6):self.size = 2 ** (size - 1).bit_length()self.default = defaultself.dat = [default] * (self.size * 2)self.f = fdef initialize(self, A):for i, a in enumerate(A, self.size):self.dat[i] = afor i in range(self.size - 1, 0, -1):self.dat[i] = self.f(self.dat[i * 2], self.dat[i * 2 + 1])def update(self, i, x):i += self.sizeself.dat[i] = xwhile i > 0:i >>= 1self.dat[i] = self.f(self.dat[i * 2], self.dat[i * 2 + 1])def query(self, l, r):"""半開区間[l,r)"""l += self.sizer += self.sizelres, rres = self.default, self.defaultwhile l < r:if l & 1:lres = self.f(lres, self.dat[l])l += 1if r & 1:r -= 1rres = self.f(self.dat[r], rres)l >>= 1r >>= 1res = self.f(lres, rres)return resN, Q = map(int, input().split())A = list(map(int, input().split()))indices = [0] * (N + 1)for i, a in enumerate(A):indices[a] = iseg = SegmentTree(N)seg.initialize(A)for _ in range(Q):q, *lr = map(int, input().split())if q == 1:l, r = lrl -= 1r -= 1al, ar = A[l], A[r]A[r], A[l] = al, arindices[ar], indices[al] = l, rseg.update(r, al)seg.update(l, ar)else: # q=2l, r = lrprint(indices[seg.query(l - 1, r)] + 1)