#P14834. [THUPC 2026 初赛] 庭中有奇树

[THUPC 2026 初赛] 庭中有奇树

题目背景

来自 2026 清华大学学生程序设计竞赛暨高校邀请赛(THUPC2026)初赛。

题解等资源可在 https://gitlink.org.cn/thusaa/thupc2026pre 查看。

题目描述

mej 先生的庭院里有一棵奇树。

这棵树上每个点都有一个正整数编号,且以编号为 11 的点为根,所有正整数都作为点的编号在这棵树上出现过。同时,编号为 ii 的点恰好有 ii 个子节点,并且这 ii 个子节点的编号是连续的:记 mn(i)\text{mn}(i)ii 号节点的子节点中编号最小的、mx(i)\text{mx}(i) 为最大的,则 mx(i)mn(i)=i1\text{mx}(i) −\text{mn}(i) = i−1mn(i)\text{mn}(i)mx(i)\text{mx}(i) 中所有数都恰好出现一次。不仅如此,对于任意的 1i<j1\le i\lt j,都有 mx(i)<mn(j)\text{mx}(i)\lt \text{mn}(j)

可以发现以上性质唯一确定了这棵奇树。例如,11 号节点的子节点有 2222 号节点的子节点有 334433 号节点的子节点有 556677,等等。不过因为 mej 先生不喜欢无限大的树,所以他只保留了这棵树上编号在 11nn 之间的节点。

mej 先生可以从这棵奇树上获取法力。具体来说,树上每个节点都有一个魔力值,初始时所有节点的魔力值都为 00;他可以选择一个节点 xx 开始获取法力,此时他将会获得 xx 的子树中(包括 xx)所有节点魔力值的异或和的法力。同时他还会对这棵树进行维护,每次他会选择一个节点 xx 和一个值 cc,然后施加法术,将 xx 的子树中所有节点的魔力值按位或上 cc

现在,mej 先生一共进行了 qq 次操作,每次操作可能是维护奇树或者获取法力。他想知道,他每次获取法力时获取的法力值是多少。

输入格式

从标准输入读入数据。

第一行输入两个正整数 nnqq1n10181\le n\le 10^{18}1q1061\le q\le 10^6),表示树的大小和操作次数。

接下来 qq 行,每行先输入一个正整数 opopop{1,2}op\in \{1,2\}),表示操作类型。若 op=1op=1,则再输入两个整数 xxcc1xn1\le x\le n1c<2601\le c\lt 2^{60}),表示将以 xx 为根的子树中所有节点的魔力值按位或 cc;若 op=2op=2,则再输入一个正整数 xx,表示查询以 xx 为根的子树中所有节点魔力值的异或和。

输出格式

输出到标准输出。

对于每次查询,输出一个整数,表示所求的异或和。

11 6
1 3 931
1 4 209
1 2 28
2 1
1 8 287
2 4
193
479

提示

【样例 1 解释】

初始时所有节点的魔力值都为 00

第一次操作,将以 33 为根的子树中所有节点的魔力值按位或 931931,所有节点的魔力值序列变为 0,0,931,0,931,931,931,0,0,0,0

第二次操作,将以 44 为根的子树中所有节点的魔力值按位或 209209,所有节点的魔力值序列变为 0,0,931,209,931,931,931,209,209,209,209

第三次操作,将以 22 为根的子树中所有节点的魔力值按位或28,所有节点的魔力值序列变为 0,28,959,221,959,959,959,221,221,221,221

第四次操作,查询以 11 为根的子树中所有节点的魔力值的异或和,即$0\oplus 28\oplus 959\oplus 221\oplus 959\oplus 959\oplus 959\oplus 221\oplus 221\oplus 221\oplus 221=193$;

第五次操作,将以 88 为根的子树中所有节点的魔力值按位或 287287,所有节点的魔力值序列变为 0,28,959,221,959,959,959,479,221,221,221

第六次操作,查询以 44 为根的子树中所有节点的魔力值的异或和,即 221479221221221=479221\oplus 479\oplus 221\oplus 221\oplus 221=479