#分块
下标从0开始,第一个块编号0
inline void block_init()
{
Block_Size = sqrt(n);
for(int i=0; ; ++i)
{
L[i] = Block_Size * i;
R[i] = L[i] + Block_Size - 1;
if(R[i] >= n)
{
R[i] = n;
Block_num = i;
break;
}
}
int now = 0;
for(int i=0; i<=n; ++i)
{
if(i > R[now]) ++now;
belong[i] = now;
}
// for(int i=0; i<=n; ++i) cout << i << " " << belong[i] << "\n";
// for(int i=0; i<=Block_num; ++i) cout << i << " " << L[i] << " " << R[i] << "\n";
}