第十分块 题解
去年写的东西现在啥都不会了
第十分块。
这题是个操作分块套序列分块。正解复杂度为
操作分块,即把每
对询问,按照
对于那些修改操作,一个显然的套路就是插入后按顺序撤销。
我们需要设计这样一个数据结构,支持
序列分块。考虑对每个极长连续 1 区间,在开头处记录其结尾位置,在结尾记录其开头位置。则新插入一个 0 的时候,可以
对于撤销操作,由于每次插入只影响了两个点的值,所以记录下原来的值及其位置,询问结束后暴力还原即可。
查询的时候,我们记录当前极长连续 1 区间的左端点,边角扫描,对于整块,可以直接通过维护的值来得出这个块的前缀 1 区间长度和后缀 1 区间长度。将其前缀与之前的左端点计算贡献,新的左端点即为后缀的那个点。然后中间的部分,通过记录的块内答案减去两边要和其他块计算答案的部分的贡献即可。
这样就做到了每块操作
记得卡卡常。