結果

問題 No.1891 Static Xor Range Composite Query
ユーザー gew1fw
提出日時 2025-06-12 15:53:56
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,487 bytes
コンパイル時間 307 ms
コンパイル使用メモリ 82,944 KB
実行使用メモリ 114,296 KB
最終ジャッジ日時 2025-06-12 15:54:08
合計ジャッジ時間 9,982 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 20 TLE * 1 -- * 9
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
MOD = 998244353

def main():
    import sys
    sys.setrecursionlimit(1 << 25)
    N, Q = map(int, sys.stdin.readline().split())
    a = []
    b = []
    for _ in range(N):
        ai, bi = map(int, sys.stdin.readline().split())
        a.append(ai % MOD)
        b.append(bi % MOD)

    logn = (N-1).bit_length()
    size = 1 << logn
    tree = [(1, 0) for _ in range(2 * size)]

    for i in range(size):
        tree[size + i] = (a[i], b[i])

    for i in range(size-1, 0, -1):
        a1, b1 = tree[2*i]
        a2, b2 = tree[2*i+1]
        tree[i] = ((a1 * a2) % MOD, (a1 * b2 + b1) % MOD)

    def query(l, r):
        res_a = 1
        res_b = 0
        l += size
        r += size
        while l < r:
            if l % 2 == 1:
                a_t, b_t = tree[l]
                res_a = (res_a * a_t) % MOD
                res_b = (res_a * b_t + res_b) % MOD
                l += 1
            if r % 2 == 1:
                r -= 1
                a_t, b_t = tree[r]
                res_a = (res_a * a_t) % MOD
                res_b = (res_a * b_t + res_b) % MOD
            l //= 2
            r //= 2
        return (res_a, res_b)

    for _ in range(Q):
        l, r, p, x = map(int, sys.stdin.readline().split())
        current_x = x % MOD
        for i in range(l, r):
            idx = i ^ p
            a_i = a[idx]
            b_i = b[idx]
            current_x = (a_i * current_x + b_i) % MOD
        print(current_x)

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