//递归方式区间查询 query(L,R,1,n,1);
int query(int L,int R,int l,int r,int k){ //[L,R]即为要查询的区间,l,r为结点区间,k为结点下标
if(L <= l && r <= R) //如果当前结点的区间真包含于要查询的区间内,则返回结点信息且不需要往下递归
return t[k];
else{
Pushdown(k); /**每次都需要更新子树的Lazy标记*/
int res = -INF; //返回值变量,根据具体线段树查询的什么而自定义
int mid = l + ((r-l)>>1); //m则为中间点,左儿子的结点区间为[l,m],右儿子的结点区间为[m+1,r]
if(L <= m) //如果左子树和需要查询的区间交集非空
res = max(res, query(L,R,l,m,k<<1));
if(R > m) //如果右子树和需要查询的区间交集非空,注意这里不是else if,因为查询区间可能同时和左右区间都有交集
res = max(res, query(L,R,m+1,r,k<<1|1));
return res; //返回当前结点得到的信息
}
}