分块

written by oneman233
2019-09-10

分块的板子:

/*
    from是某块的开始位置
    to是某块的结束位置
    id是某个点所在块的编号
*/
int tot=sqrt(n);
for(int i=1;i<=tot;++i)
    from[i]=(i-1)*tot+1,
    to[i]=i*tot;
if(to[tot]<n)
    tot++,
    from[tot]=to[tot-1]+1,
    to[tot]=n;
for(int i=1;i<=tot;++i)
    for(int j=from[i];j<=to[i];++j)
        id[j]=i;