結果

問題 No.875 Range Mindex Query
ユーザー masa_aa
提出日時 2021-02-06 04:35:33
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 1,619 ms / 2,000 ms
コード長 2,496 bytes
コンパイル時間 254 ms
コンパイル使用メモリ 12,928 KB
実行使用メモリ 24,324 KB
最終ジャッジ日時 2024-07-02 14:47:50
合計ジャッジ時間 11,881 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 18
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

class SegmentTree:
def __init__(self, init, op, e):
"""
init : int list
op : min, +, *, xor, gcd
e : (min:inf, :0, :1, xor:0, gcd:0)
"""
self.op = op
self.e = e
if isinstance(init, int):
self.size = 1 << (init - 1).bit_length()
self.seg = [e] * (2 * self.size)
else:
n = len(init)
self.size = 1 << (n - 1).bit_length()
self.seg = [e] * (2 * self.size)
seg = self.seg
for i, e in enumerate(init):
seg[i + self.size] = e
for i in range(self.size - 1, 0, -1):
seg[i] = op(seg[2 * i], seg[2 * i + 1])
def __getitem__(self, k):
return self.seg[k + self.size]
def __setitem__(self, k, x):
return self.set(k, x)
def set(self, k, x):
"""kx"""
k += self.size
seg = self.seg
seg[k] = x
while k > 1:
k >>= 1
seg[k] = self.op(seg[2 * k], seg[2 * k + 1])
def prod(self, l, r):
"""op(a[l], ..., a[r - 1])"""
l += self.size; r += self.size
s = self.e
while l < r:
if r & 1:
r -= 1
s = self.op(s, self.seg[r])
if l & 1:
s = self.op(s, self.seg[l])
l += 1
l >>= 1
r >>= 1
return s
def all_prod(self):
return self.seg[1]
def update(self, k, x):
"""kop(seg[k], x)"""
self.set(k, self.op(self[k], x))
def debug(self):
n = len(self.seg).bit_length()
res = []
k = 1
for _ in range(1, n + 1):
res.append(" ".join(map(str, self.seg[k:2 * k])))
k *= 2
k //= 2
print("-" * k)
print("\n".join(res))
print("-" * k)
def __repr__(self):
return " ".join(map(str, self.seg[self.size:]))
import sys
input = sys.stdin.readline
n, q = map(int, input().split())
a = [e * n + i for i, e in enumerate(map(int, input().split()))]
seg = SegmentTree(a, min, 10 ** 18)
res = []
for _ in range(q):
query, l, r = map(int, input().split())
if query == 1:
s, t = seg[l - 1], seg[r - 1]
s += r - l; t += l - r
seg[l - 1], seg[r - 1] = t, s
else:
res.append(seg.prod(l - 1, r) % n + 1)
print(*res, sep="\n")
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0