和 @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)\)。所以可以根据相应次数调整块大小以卡常数。
标签:LG9410,颜色,log,离线,矩阵,修改,修建,机场,做法 From: https://www.cnblogs.com/zcr-blog/p/17473481.html