Loading

LG9410 机场修建

和 @ez_lcw 胡出来的做法,不需要什么高级科技。

先假设没有 \(1\) 操作,变成初始给定若干连通块。该问题容易归约为矩阵乘法,\(A\) 矩阵每行是一种颜色,\(B\) 矩阵每列是一个操作。所以可以直接思考 \(O(n\sqrt n)\) 的做法。

通过枚举做法,发现可以序列分块。对于每个块,维护散块加的答案,和整块加的标记。最后查询的时候只需要再维护该块里面某种颜色出现次数。离线后容易做到时间 \(O(n\sqrt{n})\),空间 \(O(n)\)

如果加上了 \(1\) 操作,根据套路,可以通过并查集启发式合并,转变为 \(O(n\log n)\) 次单点修改颜色。而我们发现,刚刚做法对于每种颜色都是线性的函数,修改是可以直接修改的。由于要离线所有修改,所以空间复杂度变为 \(O(n\log n)\)

实际做的时候由于查询是 \(O(\frac{n}{B})\),修改是 \(O(B)\),第一种修改是均摊 \(O(n\log n)\)。所以可以根据相应次数调整块大小以卡常数。

posted @ 2023-06-11 20:03  Gemini7X  阅读(7)  评论(0编辑  收藏  举报
Title