permu 莫队 总结

由于每次询问静态区间里完整值域段的最大大小

貌似很好用莫队转移,所以考虑怎么转移

当给它扩展一个数时,就是给值域添加了一个值

这个值可能已经存在,也可能是新的

有的神仙做法是维护了一个并查集,然而我这码力..

所以我用了一个更加初级的操作,给每个点打上向左连续最远和向右连续最远的标记

添加一个新点时,同时更新它的向左连续最远和向右连续最远的值的标记

 

这是添加,删除呢

目前来看,如果不记录每个点的影响及其所有后续影响及其影响前的状态,删除操作就算萎了

所以要尽量不删除

可以知道莫队有个性质,在同一个左端点分块里,右端点具有单调性

虽然左端点没单调性,但他们的范围限制在一个很小的区间里(根号N的分块里)

而且对于每个左端点分块,跑一遍O(N)的操作是没问题的

如果只想添加,不想删除的话..

每次换个分块就把计数清空,把左右端点放在分块的右端点,记录此状态state

每次拓展右边,更新state

每次拓展左边,记录拓展前的state,拓展后恢复state

这样保证了每个询问至多有个根号N复杂度的左记录和恢复

每个分块至多有个O(N)的清空

复杂度变成了O(N√N).

posted @ 2019-07-25 06:27  Yxsplayxs  阅读(268)  评论(1编辑  收藏  举报