传送门
题意:有一序列S由下列方式生成:
- 找到字典序最小的正整数(a,b,c),满足a,b,c不在S中且a⊕b⊕c=0,其中⊕为异或
- 将a,b,c加入S
- 重复第一步
T组数据,求S的第n项。
T≤105,n≤1016
通过观察样例和理性猜想,可以假设前4k−1项恰好填完了1∼4k−1,显然这是整数个三元组。采用归纳法构造4k∼4k+1−1
将每个序列中的数按二进制位两个为一组拆分(以下称拆成的两个二进制位为"位"),当前的数(已构造的和此步将构造的)有2(k+1)位
之前填的4k−1项可以看成最高位为00,我们要构造的是最高位为01,10,11,后面k位分别遍历0∼4k−1
对于每一个(a,b,c)显然有a<b<c
构造a最高位为01,容易得到b,c最高位为10,11。这是最理想的结果,下面将证明这种构造是可行的。
现在已经满足了a<b<c,那么a,b,c的后k位是互不影响的。下面讨论的都是这后k位。
现在考虑如何最小化字典序
对于一个已经确定的a,我们都需要找到最小的b(废话)
对于a上的每一位,都找到一个最小的对应的b的位即可(似乎还是废话,但似乎就是想不到)
设新构造的三元组为(ai,bi,ci)(0≤i≤2k−1)显然所有的ai=i
根据以上信息可以构造出(a,b,c)每一位字典序最小的对照表
盗用官方题解的图:

随便推一下就可以了
复杂度O(Tlogn)