結果

問題 No.3444 Interval Xor MST
コンテスト
ユーザー 👑 potato167
提出日時 2025-12-28 05:27:01
言語 PyPy3
(7.3.17)
結果
AC  
実行時間 193 ms / 2,000 ms
コード長 1,039 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 317 ms
コンパイル使用メモリ 82,856 KB
実行使用メモリ 107,568 KB
最終ジャッジ日時 2026-02-06 20:51:12
合計ジャッジ時間 2,815 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 7
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import sys

def f(n: int) -> int:
    res = 0
    a = 1
    while n != 1:
        res += a * (n // 2)
        n -= n // 2
        a <<= 1
    return res

def h(n: int, m: int) -> int:
    if n == 1:
        return 0

    L = m
    R = m + n - 1

    d = 60
    while ((L >> d) & 1) == ((R >> d) & 1):
        d -= 1

    mask = (1 << (d + 1)) - 1
    L &= mask
    R &= mask

    l = (1 << d) - L
    r = (R + 1 - (1 << d))

    ans = f(r) + f(l)
    ans += (1 << d)

    d -= 1
    while d >= 0:
        if l + r > (2 << d):
            break
        if l > (1 << d):
            l -= (1 << d)
        elif r > (1 << d):
            r -= (1 << d)
        else:
            ans += (1 << d)
        d -= 1

    return ans

def main() -> None:
    data = list(map(int, sys.stdin.buffer.read().split()))
    t = data[0]
    idx = 1
    out = []
    for _ in range(t):
        n = data[idx]
        m = data[idx + 1]
        idx += 2
        out.append(str(h(n, m)))
    sys.stdout.write("\n".join(out))

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