标签:== 线段树 线段 ret else 编号 log mat cpp
用于查询区间最小值。
\[ O(n log_2n) \]
int build(int o,int l,int r){
if (l==r){
Max[o]=arr[l];
return Max[o];
}
int mid=l+(r-l)/2;
Max[o]=max(build(o*2,l,mid),build(o*2+1,mid+1,r)); //往两边建树
return Max[o];
}
int query(int ql,int qr,int l,int r,int o){ //[ql,qr]为查询的区间,[l,r]为线段树结点的区间,o为线段树结点编号
if (ql==l && qr==r){
return Max[o];
}
int mid=l+(r-l)/2;
if (qr<=mid){
return query(ql,qr,l,mid,o<<1);
}
else if (ql>mid){
return query(ql,qr,mid+1,r,o<<1|1);
}
else{ //如果查询的区间跨过了两个结点,那么就把待查询的分成两段
return max(query(ql,mid,l,mid,o<<1),query(mid+1,qr,mid+1,r,o<<1|1));
}
}
标签:== 线段树 线段 ret else 编号 log mat cpp
原文地址:https://www.cnblogs.com/lixiao189/p/9301026.html