从多校联合NUDT第二题Cube想到的关于树状数组的结论

这题一眼看去就是更新区间查找点,典型的树状数组解法,但是如果用三维树状数组的话,会遇到一个难题,那就是怎么分割?

我们看简单的问题开始,对于一维的情况,将区间(a,b)进行更新,那么就在a处加v,b+1处减v即可。

对于二维的情况,那就麻烦一点,将区域(x1,y1)到(x2,y2)进行更新,那么就在(x1,y1)处加v,在(x2+1,y1)和(x1,y2+1)处减v,在(x2+1,y2+1)处加v即可。

那么三维的呢?经过画图,我得到了结论,那就是(x1,y1,z1)加v,和(x1,y1,z1)相邻奇数长度的点减v,这些点有(x2+1,y1,z1)、(x1,y2+1,z1)、(x1,y1,z2+1)还有(x2+1,y2+1,z2+1),剩下的就是加v了。

把三个维度不同的树状数组的情况和在一起,源点P加v和P相邻奇数位置的减v,偶数位置的加v,这样就可以快速地记下来全部的切割情况了。

 

我的代码:

 

 

总结:每次做题后要反思,不能做一题过一题,宁可花时间想怎么优化代码,毕竟这个对自己好处更大。做题不贵多,而贵精。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值