分块
Dilly__dally
这个作者很懒,什么都没留下…
展开
-
CodeForces - 551E(分块)
题意:给定一个长度为N的序列。 有2个操作:1.序列第l项到第r项加v(区间加),2 .求整个序列中值为v的数的位置的差值最大是多少。不存在输出-1。思路:对n分块,用一个vector维护每一块排序后的序列,然后二分答案。分块时对每一块的vector赋值,这里因为最后要输出下标的差值,所以用一个结构体储存数据和下标,然后排序。更新时和一般分块操作差不多,只不过这里为了节约时间用了laz...原创 2019-01-17 23:08:04 · 287 阅读 · 0 评论 -
CodeForces - 13E (分块)
题意:有n个弹簧,每次扔个球,这个球可以弹到i+power[i]的位置 然后有两种操作 将第i个位置的弹簧的弹力改为b 将球扔到第i个位置,问这个球最后弹到了哪儿,这个球弹了几次?思路:对n分块,用cnt数组保存每一个点跳到别的块的次数,to数组保存每个点能直接或间接跳到的别的块的下标。容易得出cnt数组和to数组要倒退才行,因为现状态的结果由后面的状态决定。更新的时候只用更新这一块中...原创 2019-01-20 00:21:17 · 233 阅读 · 0 评论 -
HYSBZ 2957(分块)
题意:小A的楼房外有一大片施工工地,工地上有N栋待建的楼房。每天,这片工地上的房子拆了又建、建了又拆。他经常无聊地看着窗外发呆,数自己能够看到多少栋房子。 为了简化问题,我们考虑这些事件发生在一个二维平面上。小A在平面上(0,0)点的位置,第i栋楼房可以用一条连接(i,0)和(i,Hi)的线段表示,其中Hi为第i栋楼房的高度。如果这栋楼房上任何一个高度大于0的点与(0,0)的连线没有与之前...原创 2019-01-15 15:20:59 · 284 阅读 · 0 评论 -
CodeForces - 103D(分块+dp)
题意:给你n个数,p个查询,每次查询下标为a,a+b,a+2b……的和。思路:对n分块,b>时,可以直接暴力求和,最大扫描次数为O();b<=时,用一个dp[j]存放从第j个数出发求得的和,容易得出dp[j]=dp[j+b]+a[j](这里设a为数据数组,下面的a和题意相同),为了更优化,更新dp之前先判断这一次询问的b是不是和上一次相同,如果相同,那么可以直接使用上一次得出的dp...原创 2019-01-16 21:48:29 · 356 阅读 · 0 评论