poj 2155 Matrix 二维树状数组

http://poj.org/problem?id=2155

没有想到c数组用来记录改变次数 ,我一开始是记录了改变 如果c[x][y]=1 c[x][y]=0 这样子 行不通,因为c[x][y]管的不仅是一个点,无法确定 c的改变是因为哪个点改变而得到的。

可以参考论文:浅谈信息学竞赛中的“0”和“1” 

在这里解释一下为什么 增加头和尾+1 的两个节点的值 ,之后通过将1~所问的值n 的c[x]数组加起来sum%2 就可以得到 a[x] 是0还是1 

可以在纸上写写。

如果修改的全部区间在1~n内则计算sum的时候 肯定是偶数,因为有重复。

如果跨过只有一个跨过n 的跨区间的话,计算sum的时候肯定为奇数,因为只有一头在n的左边加一,另有头在n的右边加一,sum是不计算n的右边的。

如果有两个跨过n 的跨区间的话,根据 奇数+奇数=偶数 则sum为偶数

综上

如果sum为偶数则a[n]修改了0次或者偶数次 a[n]的值不变

如果sum为奇数,a[n]修改了奇数次,a[n]的值改变

可以参考https://blog.csdn.net/zxy_snow/article/details/6264135


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值