UOJ NOI Round #6 Day2

小火车

模数限制很奇怪。考虑把每个数 [1,0,-1] 三种状态变成 [1,0] 两个,取模意义下相同就可以状态相减,得到构造方案。

由鸽巢原理得必定有解。

我们现在想要知道那个出现次数不止一次的值是多少。

可以二分,计算值域在左区间的值的个数是否大于左区间的大小,如果大于,答案就可以在左区间,否则右区间一定有答案。

至于计算值域在一个区间的数的个数,可以 meet-in-mid 然后双指针计算。

注意卡常,然后就结束了。

神隐

考虑二进制分组,按位询问。

每条边两两编号不同,则如果两个点在一个联通块恰好 \(\omega\) 次,则他们之间必然有边。

可以给每条边重编号,使得编号两两不同且恰好有 \(k\)\(1\)

然后按位询问,询问次数就达到要求了。

考虑优化时间复杂度。叶子很好找,考虑每次删去叶子,然后再把叶子加回来。

加回来的过程中可以查询他在的每个联通块,他的父亲一定是这些联通块的交集,两个联通块的交集一定包含他们的 \(LCA\) ,一个联通块的 \(LCA\) 一定是深度最小的点。

因此他们的交集就是这些联通块的深度最小的点中深度最大的。

做完了。

posted @ 2022-08-10 11:02  Reanap  阅读(51)  评论(0编辑  收藏  举报