HDU 4872 ZCC Loves COT 对标记的标记打标记

这篇博客详细解析了HDU 4872 ZCC Loves COT问题,这是一个涉及三维空间的区间更新和查询的算法题。通过一维到二维再到三维的递归扩展,博主介绍了如何利用标记和前缀和的方法高效处理更新和查询操作。在二维空间中,通过打标记和两次前缀和还原一维标记状态,再进行累加求解。在三维空间中,博主探讨了二维标记如何扩展到三维,并提出预处理不同方向的前缀和,以便在O(1)时间内求解四面体区域的和。
摘要由CSDN通过智能技术生成

原题:http://acm.hdu.edu.cn/showproblem.php?pid=4872

题意:给一个n*n*n的方体,定义两种操作,修改操作是给出x,y,z,a,把满足0 <= k <= j <= i < a的所有val[x+i][y+j][z+k]的值+1,询问操作类似询问这个区域的val和,更新和查询都是10W,n是100,所有更新都结束后才会开始查询


解题思路:

首先请看此题的一维版本:http://acm.hdu.edu.cn/showproblem.php?pid=1556

这道题目就很经典了,对于一次更新[l, r], 我们操作 a[l]++, a[r+1]-- ,然后求一次前缀和,就可以得到具体的 a[i] 的值

原理就是遇到+1表示有一次涂色从这里开始,遇到-1表示有一次涂色到此结束,具体就不在详细说了

对于这样的操作我们称为打标记


然后我们把他扩展到二维版本

定义修改操作是给出 x, y, a 对满足 0 <= j <= i < a 的所有 val[x+i][y+j] 的值 +1, 询问类似

我们在平面首先画出这样一个区域


向下的是x + i的部分,向右是y + j部分,满足 j <= i 的部分画出来就是这样一个三角形

那么我们仿照一维的情况,对于每一行打标记,就变成了下面这样


这时我们可以发现,标记是连续的一段,相当于我们对一维的线段打的两个点标记,在线段扩展到二维平面的同时,被拉伸成了线段

那么对于这个由标记生成的线段,我们仍然可以打标记,对于两个方向,分别打标记,一共四个,效果如下


竖直方向的+1, -1是每行 + 标记的标记,斜线方向的则是 - 的标记

注意 - 标记也是继续按 +1 -1来打标记,这时的前缀和表示有多少个 - 标记,而不是减了多少

然后对于这两种标记,我们分别先沿向下和向右下的方向做一次前缀和,就可以还原出一维标记的情况

然后再从左向右累加,就可以得到具体元素的值


那么当我们得到具体元素的值之后,如何在O(1)效率求解任意三角形区域的sum值,还需要进一步讨论

根据一维前缀和&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值