結果

問題 No.868 ハイパー部分和問題
ユーザー gew1fw
提出日時 2025-06-12 15:25:02
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,016 bytes
コンパイル時間 238 ms
コンパイル使用メモリ 82,584 KB
実行使用メモリ 92,088 KB
最終ジャッジ日時 2025-06-12 15:25:38
合計ジャッジ時間 25,370 ms
ジャッジサーバーID
(参考情報)
judge3 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample -- * 2
other AC * 29 TLE * 1 -- * 8
権限があれば一括ダウンロードができます

ソースコード

diff #

def main():
    import sys
    input = sys.stdin.read().split()
    ptr = 0
    N, K = int(input[ptr]), int(input[ptr+1])
    ptr +=2
    A = list(map(int, input[ptr:ptr+N]))
    ptr +=N
    Q = int(input[ptr])
    ptr +=1
    operations = []
    for _ in range(Q):
        x, v = int(input[ptr])-1, int(input[ptr+1])
        operations.append((x, v))
        ptr +=2

    B = [a for a in A if a <= K]

    def can_reach_k():
        mask = 1
        max_bit = K + 1
        for a in B:
            mask |= mask << a
            mask &= (1 << max_bit) - 1  # 保留到K+1位
            if (mask >> K) & 1:
                return True
        return False

    for x, v in operations:
        old = A[x]
        A[x] = v
        if v <= K:
            if old > K:
                B.append(v)
            else:
                B.append(v)
                B.remove(old)
        else:
            if old <= K:
                B.remove(old)
        print(1 if can_reach_k() else 0)

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