整数分块
更新日志
概念
对一个序列进行操作时,对其中某个值分块,保证能快速(通常是 \(O(1)\))解决块内问题。
常见的情况是进行模运算,将其转化成减法,按值与模数的关系分块。
思路
以取模为例,我们考虑将取模运算转化成减法运算,那么需要分块的其实是需要减去的模数个数。
其他的以此类推。
核心代码
for(int l=1,r;l<=n;l=r+1){
r=/*计算出这一区块的右区间*/;
/*更新答案*/
}
对一个序列进行操作时,对其中某个值分块,保证能快速(通常是 \(O(1)\))解决块内问题。
常见的情况是进行模运算,将其转化成减法,按值与模数的关系分块。
以取模为例,我们考虑将取模运算转化成减法运算,那么需要分块的其实是需要减去的模数个数。
其他的以此类推。
for(int l=1,r;l<=n;l=r+1){
r=/*计算出这一区块的右区间*/;
/*更新答案*/
}