对不寻常分块的正确性以及复杂度证明
继上次发了一个关于 RMQ 优化的想法,又有许多想法从我脑子里源源不断冒出来。
众所周知,分块可以用来解决许多序列问题。
但是依然有分块解决不了的东西,比如这个题。
上面那个题前 3 个操作应该都可以通过普通的分块解决,即暴力修改散块,整块打标记。
但是第四、五、六个操作是不能这样的,因为如果散块暴力修改,整块打标记,会导致某个块在数组中的位置会移动。
这里以第六个操作举例:
比如 1 2 # 3 4 # 5 6,翻转 1~5。
最终理想结果是 5 4 # 3 2 # 1 6。
我们发现了一个问题,就是 3 4 这个块移动了。
这时我有个想法,就是动态维护块左右端点。
也就是翻转后变成了 5 # 4 3 # 2 1 6。
这样就保证了正确性,但是显然这样做会导致时间复杂度不平衡,但是这个时候我们可以检测一下:
当几个块不平衡时暴力重构整个数组,类似于替罪羊树一样。
不知道能否像替罪羊树一样均摊分析下来复杂度正确,感觉理论可行。