可能是我分块题做得太少了吧,做这道题的时候因为一个sb错误调了好久。
写修改 O(1) 查询 O(n) 的分块时,数组要这样开:
int ax[N+1000],bl[1000],Len;
因为我的查询时这样的:
for (int k = qu[i].l; k < (L+1)*Len; ++k) res += ax[k];
for (int k = L+1; k <= m/Len; ++k) res += bl[k];
如果原数组大小不加一个块的小,在算散块时,可能会在查询时出界(查询时判断一下也可以)。
感觉是一个比较细节的地方,可能是我太菜了吧!