分块的板子:
/*
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;