线段树常见题型
<1> 普通建树
void build(int l,int r,int o)
{
if(l==r)
{
sum[o]=1;//可根据实际情况具体选择;也可以是输入
scanf("%d",sum[o]);
ans[o]=sum[o];//同时维护两个线段树就需要用到这个;
return ;
}
int mid=(l+r)>>1;
build(l,mid,o<<1);
build(mid+1,r,o<<1|1);
sum[o]=sum[o<<1]+sum[o<<1|1];//这里是求和;
sum[o]=max(sum[o<<1],sum[o<<1|1]);//这里是求最大值
ans[o]=min(ans[o<<1],ans[o<<1|1]);//这里是求最小值;往往和求最大值一起出现
}
<2> 懒惰标记
懒惰标记也分好几种;
直接更新直接换值
void pushdown(int o,int l)
{
if(add[o])//直接更新直接换值
{
add[o<<1]=add[o];
add[