CF1764G2 Doremy’s Perfect DS Class (Medium Version) 题解

前言

更可爱的阅读体验

思路

前置芝士:CF1764G1 的解法。

考虑在 G1 的基础上进行一个小小的优化。

G1 的最大询问次数是 3logn3\log n,其瓶颈在于当 nn 为偶数时,我们需要预先额外花费 logn\log n 的时间去找到 nn 的位置,从而消除后续询问里 nn 的影响,因为这时 nn11 一样都具有除以 22 向下取整的结果唯一的性质。

而 G2 把最大询问次数限制到了 2525 次,所以我们需要找一种更高效的辨别 nn11 的方式来代替预先询问。

当我们对 [1,k][1,k][k+1,n][k+1,n] 两个区间进行询问时,除了 11nn 之外,两个区间里无法配对数字的数量一定是相等的,那我们可以分类讨论 11nn 的位置:

  • 11nn 在同一个区间里时,这个区间里未配对的数字个数会比另一边大 22,于是继续处理这个区间就好。
  • 11nn 分居在两个区间里时,两个区间里未配对的数字个数相等,我们只需要对其中一个区间进行一次 ? l r n?\ l\ r\ n 的询问,如果得到的结果是 22 那就证明 11 不在这个区间里,反之则证明 11 在另一个区间里,于是我们就可以记录下 nn 所在区间,继续对有 11 的区间进行询问。

进行这个优化之后,我们就可以把询问次数降低到 2logn+12\log n+1,其中这 11 次询问就是用来帮助我们辨别 nn 的询问,可以通过此题。

代码:link