照着 mrsrz 的题解想的:
void query(int l,int r,int o,const int&X,const int&Y,int&x){
if(l==r){
if(d[o]>=Y)
x=l;return;
}
const int mid=l+r>>1;
if(X<=mid&&d[o<<1]>=Y)query(l,mid,o<<1,X,Y,x);
if(~x)return;
if(d[o<<1|1]>=Y)query(mid+1,r,o<<1|1,X,Y,x);
}
如果线段树长这样:
......1
.../ \
..2 3
./ \ / \
4 5 6 7
8 9 10 ... 15
然后一个询问覆盖线段 9,5,3,然后答案在 15,那不会把 3,5,6,7,8,9,⋯,15 都访问到,从而复杂度就变成 O(log2n) 吗?