-
请明确您的 rnk(l,r,x) 查询的是 [l,r] 内小于 x 的数个数 +1 还是 [l,r] 内小于等于 x 的数的个数。后者是正确的。
-
块内排序应该是 sort(a+begin[k],a+end[k]+1) 而非 sort(a+begin[k]+1,a+end[k]+1) 或者 sort(a+begin[k],a+end[k])。
-
实测较优的块长满足 Δ∈[200,300],似乎并不满足 Δ=nlogn。(当然如果您用 Δ=nlogn 通过了本题,我收回这句话)
-
需要使用一般的卡常技巧,包括但不限于:快读,位运算等。
-
二分答案需要使用 mid=(l+r)>>1 而非 mid=(l+r)/2,原因是会出现负数。
-
针对本题的卡常技巧,包括但不限于:块内判断排名时若超过最大值或低于最小值则直接退出,存储散块内数据进行二分,二分答案边界使用区间最大最小值,散块加采用归并排序等。
-
无论何时,调用单个数据时记得考虑整块修改的懒标记。