线段树模板

来源:互联网 发布:dnspod免费域名 编辑:程序博客网 时间:2024/05/06 12:27
void PushUp(int tr)//往上更新{    sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];}void buildT(int l , int r ,int rt)//建树{    if(l == r){        scanf("%d",&sum[rt]);        return ;    }    int m = (l + r) >> 1;    buildT(l , m , rt << 1);    buildT(m + 1 , r , rt << 1 | 1);    PushUp(rt);}void UpDate(int p , int add ,int l ,int r,int rt)//更新节点{    if(l == r){        sum[rt] += add;        return;    }    int m = (l + r) >> 1;    if(p <= m) UpDate(p , add ,l , m , rt << 1);    else UpDate(p , add , m + 1 , r , rt << 1 | 1);    PushUp(rt);}int query(int ll ,int rr ,int l , int r ,int rt)//查询{    if(ll <= l && rr >= r) return sum[rt];    int m = (l + r) >> 1;    int ret = 0;    if(ll <= m) ret += query(ll ,rr , l , m , rt << 1);    if(rr > m) ret += query(ll ,rr , m + 1 , r , rt << 1 | 1);    return ret;}
0 0