[WC2023] 楼梯

后悔开题顺序为什么是 231 ????

发现对于一个点生成的子楼梯边界就是它右边和下面的方块个数之和 +1+1

根据小学表面积简易算法, 考虑维护阶梯的右下分界线,竖线为 11,横线为 00

问题变成找到以 11 开头,以 00 结尾长度为 q+1q+1 的串。

思考 qq 是总体因子的性质。

发现当楼梯不为空时,保证有解。

考虑反证,假设当前楼梯边界格数为 99不能出现边界数为 qq 的情况(qq99 的非 99 因子)。

1--------0

于是可以肯定第一个 11 后面的第 qq 位为 11,如此类推。

假设 q=3q=3,于是有

1--1--1--0

所以,最后还是会出现边界数为 33 的情况,qq 同理。

这个的启发就大了。

发现可以直接从第 1+kq1+kq 位找寻答案,其中 k0k\ge 0注意下文的第 ii 位定义为第 1+(i1)q1+(i-1)q

考虑从后往前找,如果倒数第二位为 11,那么有解;否则考虑倒数第三位。

优化查找过程,二分就行了。

考虑判定,记当前二分到了第 xx 位,如果第 xx 位为 11,那么不管他左边是否有满足的,他的右边一定有满足的;否则,他的左边一定有满足的。

回到修改,线段树维护每一个 11 与下一个 11 之间 00 的个数。

对于前缀以及后缀修改,简单维护。

对于撤销操作,经典可持久化。

时间应该是双 log 的。

posted @ 2023-01-18 20:38  蒟蒻orz  阅读(9)  评论(0)    收藏  举报  来源