神仙扫描线题?遵从 JZOJ 题解中的说法写了个 bitset 后来发现可以用线段树。
(JZOJ 上的只能 bitset,空间卡得紧)
维护一个宽度为 k 的扫描线,并维护其上的 m−k+1 个正方形。
每次只会新增一行减少一行的贡献。
由于边长是确定的,所以新增 / 减少某个位置的贡献一定是第二维的某个区间。
对于每种颜色用 bitset 维护其出现的列,则只要能求得该位置的前驱后继即可得到该区间。
于是差分 + 前缀和即可。
(话说 JZOJ 上卡得有点紧,于是特判掉了搬题人的一个 subtask
代码:
1 |
|