P14513 [NFLSPC #8] 追忆desuwa
题目背景
Zhengxu Sakiko 是一位著名的算法竞赛选手。只不过他由于记性太差经常忘记学过的算法。
这就是为什么他常常追忆过去。
题目描述
请注意本题特殊的空间限制。
给定 $m$ 个三元组 $(l,r,v)$。
有 $q$ 个操作,每次给出 $x,y$,表示查询 $l\le x\le r$ 且 $v\le y$ 的三元组中,$v$ 的最大值是多少。
如果不存在满足条件的三元组,输出 $0$。
本题强制在线。
输入格式
第一行两个整数 $m,q$。
接下来 $m$ 行每行三个整数表示一组 $(l,r,v)$。
接下来 $q$ 行每行两个整数 $p,q$ 表示当前询问满足 $x=p\oplus ans,y=q\oplus ans$,其中 $\oplus$ 表示异或操作,$ans$ 表示上次询问的答案和 $2^{21}-1$ 按位与的值。初始的 $ans$ 是 $0$。
输出格式
对于每个询问输出一行表示答案。
说明/提示
### 数据范围
|子任务名称|子任务编号|分值|限制
|:-:|:-:|:-:|:-:|
|用脚维护|1|25|空间限制为 2048MiB|
|不劳而获|2|25|$q\le 3\times 10^4$|
|数据结构大师|3|25|$q\le 10^5$|
|我即是虚像|4|25|无特殊限制|
对于所有数据:$1\le m,q\leq 10^6,1\le l\le r\le 2\times 10^6, 0\le v>1;
int L{B[x].rk0(i)},R{B[x].rk0(j)};
if (R-L>=k) return qry(L,R,k,l,mid,x+1);
else return qry(pos[x]+B[x].rk1(i),pos[x]+B[x].rk1(j),k-(R-L),mid,r,x+1);
}
} tr;
int main() {
int n,m;read(n,m);
vector a(n);
for (int i=0;i