
分块
文章平均质量分 64
qq_20340417
这个作者很懒,什么都没留下…
展开
-
[bzoj3343] 教主的魔法
题意(原题):给个序列,支持两种操作:区间加法,区间询问大于某个数的元素有多少个。n<=1000000,q<=3000。思路:Pro2代码:#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm...原创 2018-03-24 16:34:28 · 212 阅读 · 0 评论 -
算法 - 分块
分块的基本思想是,将处理的一组数分成一些块,对于每个l-r的操作,l和r两端所在的不完整的块单独处理,其余每个完整块只需统计这个块的信息而不必遍历这个块内所有的元素,从而节约时间。分块大小通常可以使用根号n,但对于不同题目可以使用均值不等式找到更好的分块大小。hzwer的分块教程题目列表简易题解notice:我的代码元素个数都是0~n-1,块的编号也是。这样可以使用i/size找到i在...原创 2018-03-20 21:29:44 · 370 阅读 · 0 评论 -
[bzoj2453] 维护队列
题意(原题):给出一组数列,有两种操作:单点改值;询问区间内有多少不同的值。n,m<=10000。修改少于1000次。对了这题和2120一模一样。思路:a[i]为i的值,b[i]为在i前面且最靠近i的且值等于a[i]的元素,,c[i]为b[i]在每个区块内排序后的值。每次修改:更新i后面的第一个值等于a[i]的元素的b[j],b[j]=b[i](这时a[i]还是原来的值)。更...原创 2018-03-26 11:08:27 · 288 阅读 · 0 评论 -
[bzoj2002] D飞绵羊
题意(原题):一只绵羊,在i会被D飞到i+a[i]。操作有询问从i出发被D多少次以后出了数列,或者改a[i]。n<=200000,m<=100000。思路:分块,每个块大小sqrt(n)+1。jump[i]表示从i开始跳,直到跳出i所在的块后的位置。jumpNum[i]表示跳出i所在的块要跳多少次。对于询问就每次加上jumpNum[i]然后跳到jump[i],直到跳出去;对于修...原创 2018-03-22 09:18:30 · 136 阅读 · 0 评论