Data 是没有交换律的,意味着所有的操作都要按时间来。
如果平面上横着竖着加起来有 \(n\) 条直线,那么最多将平面划分的区域数是 \(n^2\) 级别的。不妨考虑操作分块,每 \(B\) 个修改分一个块,在一个块内维护每个区域的标记。接下来讨论一些细节:
- 建立标记结构:一行块一行块的考虑,时间复杂度是 \(O(B^2)\),操作次数是 \(O(B^2)\) 的,常数小。
- 找到所属区域:找到其前面有多少竖线,上面有多少横线即可,这个可以用二分完成。
- 散块查询信息:暴力考虑所有的询问,操作次数是 \(O(\frac{n}{B})\) 的。
仔细算一下操作次数,感觉会被卡。
不妨考虑用二进制分组的方式处理散块。
明天细想先睡觉了。