結果

問題 No.3198 Monotonic Query
ユーザー 三価スニウム
提出日時 2025-07-11 21:58:53
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 272 ms / 3,000 ms
コード長 1,886 bytes
コンパイル時間 458 ms
コンパイル使用メモリ 82,048 KB
実行使用メモリ 82,176 KB
最終ジャッジ日時 2025-07-12 10:54:23
合計ジャッジ時間 7,357 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
sys.setrecursionlimit(10**7)
def input():
    return sys.stdin.readline().strip()

class SegTree:
    def __init__(self, op, e, n: int, v=None):
        self.n = n
        self.e = e
        self._op = op
        self.depth = (n-1).bit_length()
        self.size = 1 << self.depth
        self._data = [self.e()] * (self.size<<1)
        if v:
            for i in range(self.n):
                self._data[i+self.size] = v[i]
            for i in range(self.size-1, 0, -1):
                self._data[i] = self._op(self._data[i<<1], self._data[i<<1|1])

    def __str__(self):
        return str(self._data[self.size:])

    def __iter__(self):
        return iter(self._data[self.size:])

    def __setitem__(self, i: int, value):
        i += self.size
        self._data[i] = value
        while i:
            self._data[i>>1] = self._op(self._data[i], self._data[i^1])
            i >>= 1

    def __getitem__(self, key: int|slice):
        if isinstance(key, slice):
            return [self._data[i+self.size] for i in key]
        return self._data[key+self.size]

    def prod(self, start: int, end: int):
        prodl, prodr = self.e(), self.e()
        l = start + self.size
        r = end + self.size
        while l < r:
            if l & 1:
                prodl = self._op(prodl, self._data[l])
                l += 1
            if r & 1:
                r -= 1
                prodr = self._op(prodr, self._data[r])
            l >>= 1
            r >>= 1
        return self._op(prodl, prodr)

    def allprod(self):
        return self._data[1]

def main():
    Q = int(input())
    segtree = SegTree(max, lambda: 0, Q)
    i = 0

    for _ in range(Q):
        n, x = map(int, input().split())
        if n == 1:
            segtree[i] = x
            i += 1
        else:
            print(segtree.prod(i-x, i))

if __name__ == '__main__':
    main()
0