1、分块算法初始化:
void build(ll n)
{
ll block=sqrt(n);//每块个数
ll num=n/block;//总共有几块
if(n%block) num++;//不能整除加1
for(ll i=1;i<=num;i++)
{
l[i]=(i-1)*block+1;//确定每块的左右点
r[i]=i*block;
}
r[num]=n;//最后一个块的右端点一定是n
for(ll i=1;i<=n;i++)
{
belong[i]=(i-1)/block+1;//确定每个点属于那一块
}
}