我在 change 函数里 assert 了一发 tr[p].r>=l&&tr[p].l<=r 发现 RE 了六个点,于是加上 if(tr[p].r<l||tr[p].l>r)return; 这句就 AC 了。个中理由大概是二分 kkk 的时候会出现某个询问区间大于 kkk 的数一个没有或者占满了的情况,这个时候就会出现不符合断言的情况。所以要加特判。
tr[p].r>=l&&tr[p].l<=r
if(tr[p].r<l||tr[p].l>r)return;