UOJ NOI Round #6 Day2
小火车
模数限制很奇怪。考虑把每个数 [1,0,-1]
三种状态变成 [1,0]
两个,取模意义下相同就可以状态相减,得到构造方案。
由鸽巢原理得必定有解。
我们现在想要知道那个出现次数不止一次的值是多少。
可以二分,计算值域在左区间的值的个数是否大于左区间的大小,如果大于,答案就可以在左区间,否则右区间一定有答案。
至于计算值域在一个区间的数的个数,可以 meet-in-mid
然后双指针计算。
注意卡常,然后就结束了。
神隐
考虑二进制分组,按位询问。
每条边两两编号不同,则如果两个点在一个联通块恰好 \(\omega\) 次,则他们之间必然有边。
可以给每条边重编号,使得编号两两不同且恰好有 \(k\) 位 \(1\)。
然后按位询问,询问次数就达到要求了。
考虑优化时间复杂度。叶子很好找,考虑每次删去叶子,然后再把叶子加回来。
加回来的过程中可以查询他在的每个联通块,他的父亲一定是这些联通块的交集,两个联通块的交集一定包含他们的 \(LCA\) ,一个联通块的 \(LCA\) 一定是深度最小的点。
因此他们的交集就是这些联通块的深度最小的点中深度最大的。
做完了。