支持区间修改和区间查询的线段树

这种线段树支持区间修改和区间查询,区间修改的操作通过懒惰标记(lazy tag)实现。

一道支持区间修改和区间查询的线段树的模板题:Luogu P3372 【模板】线段树 1。下面附上AC代码:

#include
#include
#include
#include
#include
#include
using namespace std;
const int MAXN=400010;
struct Node{
    int l,r,ls,rs;
    long long c,s;
}T[MAXN];
int cnt=0,x[MAXN];
int build(int l,int r){
    int t=cnt++;
    T[t]=(Node){l,r,-1,-1,0ll,0ll};
    if(l>1;
        T[t].ls=build(l,mid);
        T[t].rs=build(mid+1,r);
        T[t].s=T[T[t].ls].s+T[T[t].rs].s;
    }
    else T[t].s=x[l];
    return t;
}
void pushdown(int v){
    if(T[v].c){
        if(T[v].lT[v].r || rT[v].r || T[v].l>r) return 0;
    pushdown(v);
    return query(T[v].ls,l,r)+query(T[v].rs,l,r);
}
int main(){
    int N, M;
    scanf("%d%d",&N, &M);
    for(int i=0;i

你可能感兴趣的:(支持区间修改和区间查询的线段树)