POJ2155

题目是说对一个01矩形区间有两种操作:一是置反某一块区间[a][b]--->[c][d](0变1,1变0),二是询问[i][j]位置处的当前值是0还是1。转化为树状数组的方法便是:01矩阵初始化为0,对于置反操作,等价于将小矩形块的四角置反(以此表示这四角代表的矩形块被执行置反),于是我们对于置反操作,只操作四角的即可(可以累加操作次数,也可以单纯的模拟置反操作,此时可利用bool数组),然后对于询问,只统计其左上方的矩阵元素的和(累加)奇偶情况,奇数说明最终置1,否则置0。
注意修改函数add只是对于[i][j]以及其后的点起作用,而我们统计的时候显然是不把自身统计在内的,所以对于子矩形块终点
[c][d],要分别++,这样就可避免统计的时候把自己算在内(刘汝佳的讲义讲到这题时没提到这点),然后就是裸的二维树状数组操作了。楼教的题,很不错。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值