数列分块整理..
先分块,把n个数分成根号n个块,每个块根号n个数,(如果不是完全平方数区间个数就+1)
num数组记录每个数
lef数组维护当前这个数所在区间的左边界
rig数组维护当前这个数所在区间的右边界
blo数组维护当前这个数属于哪一个块
lazy数组维护每个块增加的数
思路:
修改
1.对于每次修改,找到L所在的块和R所在的块
2.如果L和R在相邻块或者同一块,直接枚举区间num[i]+C;
3.否则,枚举第L和R中间的块,lazy[i]+C,并且枚举L所在的块和R所在的块的num[i]+C;
查询
第i个数的.
原创
2021-07-22 09:57:51 ·
173 阅读 ·
0 评论