博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2155 Matrix 二维树状数组
阅读量:4589 次
发布时间:2019-06-09

本文共 528 字,大约阅读时间需要 1 分钟。

没有想到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

转载于:https://www.cnblogs.com/LandingGuy/p/9280267.html

你可能感兴趣的文章
常用Linux文件系统
查看>>
Linux内核移植的若干问题
查看>>
linux程序对比
查看>>
linux数码管驱动程序和应用程序
查看>>
linux在菜单中添加SEG选项
查看>>
linux物理地址和虚拟地址
查看>>
linux驱动程序与菜单关联
查看>>
linux在配置菜单中添加选项
查看>>
linux修改文件系统注册设备
查看>>
linux添加地址映射
查看>>
c#程序集
查看>>
Microsoft 中间语言
查看>>
.NET Framework 简介
查看>>
c#通用语言运行时CLR
查看>>
编译和执行 C# 应用程序
查看>>
c#命名空间
查看>>
c#字面量
查看>>
C# 应用程序文件夹结构
查看>>
c# Format() 方法
查看>>
c#实例
查看>>