题目链接:
http://poj.org/problem?id=2155
题目大意:
给定一个矩阵,初始化为0,现在可以进行两种操作,一种是查询某个点的值是 0 还是 1。另一种是让这个矩阵的一个子矩阵内的值取反。
解题过程:
省赛选拔赛的题,太难了直接没看………
后来补起来,有模板还是挺容易的。
题目分析:
首先这题虽然看起来像是一个区间修改,单点查询的题,但是可以转化成单点修改,查询区间和。
- 首先考虑一维的情况,我要一段区间取反,假设是 [l, r]。那么我只需要
book[l]+1
,book[r+1]+1
,假设查询 k 的时候,只需要查询前 k 的和 mod 2 的结果即可。 然后这种方法可以推广到二维,不过这里要用一下容斥原理。假设修改的子矩阵左上角和右下角分别为 x1 y1 x2 y2,首先
book[x1][y1]+1
,book[x2][y2]+1
,不过这时要book[x1][y2+1]+1
,book[x2+1][y1]+1
。
- 首先考虑一维的情况,我要一段区间取反,假设是 [l, r]。那么我只需要