Description
给出最小的n使得区间[l,r]出现在了build(1,0,n)建出的线段树中,若无解(在limit范围内)输出-11
2
3
4
5void build(int now,int l,int r){
if(l==r) return ;
int mid=l+r>>1;
build(now*2,l,mid); build(now*2+1,mid,r);
}
Solution
每一个点寻找它的父亲,共四种选择,都搜索一下即可
重点是此类搜索的剪枝,应考虑它的存在特性
比如在此题,因为线段树是二叉树,所以可以用它作为一个子树其是否具有左侧森林(同层而言)来剪枝
Code
1 |
|
总结
搜索剪枝考虑一定要周全
思考搜索本身的性质