CF1616H Keep XOR Low

题目描述

给定一个数组 $a_1, a_2, \ldots, a_n$ 和一个整数 $x$。 请你计算有多少个非空下标子集 $1 \leq b_1 < b_2 < \ldots < b_k \leq n$,使得对于所有的下标对 $(i, j)$,其中 $1 \leq i < j \leq k$,都有 $a_{b_i} \oplus a_{b_j} \leq x$。这里,$\oplus$ 表示[按位异或运算](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)。由于答案可能非常大,请输出对 $998\,244\,353$ 取模后的结果。

输入格式

输入的第一行包含两个整数 $n$ 和 $x$($1 \leq n \leq 150\,000$,$0 \leq x < 2^{30}$)。其中 $n$ 表示数组的长度。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \leq a_i < 2^{30}$):即数组本身。

输出格式

输出一个整数,表示满足条件的非空子集数量,使得任意一对元素的按位异或不超过 $x$,结果对 $998\,244\,353$ 取模。

说明/提示

由 ChatGPT 4.1 翻译