分块在建块的时候,为什么这么敲:
for(int i=1;i<=bknum;i++){
st[i]=(i-1)*bklen+1,ed[i]=min(n,i*bklen);
for(int j=st[i];j<=ed[i];j++)pos[j]=i;
}
就错了。
这么敲:
for(int i=1;i<=bknum;i++)st[i]=(i-1)*bklen+1,ed[i]=i*bklen;
ed[bknum]=n;
for(int i=1;i<=bknum;i++)for(int j=st[i];j<=ed[i];j++)pos[j]=i;
就对了