专栏文章

题解:CF2157G Isaac's Queries

CF2157G题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min1i8cj
此快照首次捕获于
2025/12/01 19:02
3 个月前
此快照最后确认于
2025/12/01 19:02
3 个月前
查看原文
aia_i 做前缀和得到 sis_i,每次询问变成 f(u,v)=log2(suxorsv)f(u,v)=\left\lfloor\log_2(s_u \operatorname{xor} s_v)\right\rfloor
首先考虑只有 0/10/1 怎么做,钦定 s0=0s_0=0,那么有 sn=[f(0,n)=0]s_n=[f(0,n)=0]。同理,对于 0<in20<i\leq \frac{n}{2}sis_i 询问 f(i,n)f(i,n) 可以代价更小地得到答案;对于 n2<i<n\frac{n}{2}<i<nsis_i 询问 f(0,i)f(0,i)。这样我们得到了所有 sis_i 的值,直接计算 n(n+1)2\frac{n(n+1)}{2} 个询问即可。
然后考虑原问题。考虑拆位,假设当前计算到第 dd 位,钦定 s0s_0 这一位是 00,使用类似的方法我们能知道 sis_i 这一位值是多少。接下来像字典树一样我们分成左右两棵子树,两棵子树之间点的答案就是 dd,子树内部的答案就是递归子问题。

评论

0 条评论,欢迎与作者交流。

正在加载评论...