• POJ


    题目链接

    线段树区间修改,每个数均加上一个值。区间查询和。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<string>
    #include<cmath>
    using namespace std;
    
    const int N = 1e5 + 50;
    int n,m;
    
    #define mid ((l + r) >> 1)
    #define ls (nod << 1)
    #define rs (nod << 1 | 1)
    #define lson ls,l,mid
    #define rson rs,mid + 1, r
    
    struct Node{
        long long add,sum,len;
    }t[N << 2];
    void pushup(int nod){
        t[nod].sum = t[ls].sum + t[rs].sum;
    }
    void pushdown(int nod){
        if(t[nod].add == 0) return ;
        t[ls].add += t[nod].add; t[rs].add += t[nod].add;
        t[ls].sum += t[ls].len * t[nod].add; t[rs].sum += t[rs].len * t[nod].add;
        t[nod].add = 0;
    }
    void build(int nod,int l,int r){
        t[nod].add = 0; t[nod].len = r - l + 1;
        if(l == r){ scanf("%lld",&t[nod].sum); return ;}
        build(lson); build(rson); pushup(nod);
    }
    void update(int nod,int l,int r,int ll,int rr,long long v){
        if(l > rr || r < ll ) return ;
        if(ll <= l && r <= rr){
            t[nod].add += v; t[nod].sum += t[nod].len * v;
            return ;
        }
        pushdown(nod);
        update(lson,ll,rr,v); update(rson,ll,rr,v);
        pushup(nod);
    }
    long long query(int nod,int l,int r,int ll,int rr){
        if(l > rr || r < ll) return 0;
        if(ll <= l && r <= rr) return t[nod].sum;
        pushdown(nod);
        return query(lson,ll,rr) + query(rson,ll,rr);
    }
    
    int main(){
        scanf("%d%d",&n,&m);
        build(1,1,n);
        while(m --){
            char c; scanf(" %c",&c);
            if(c == 'Q') { int l,r; scanf("%d%d",&l,&r); printf("%lld
    ",query(1,1,n,l,r)); }
            if(c == 'C') { int l,r,v; scanf("%d%d%d",&l,&r,&v); update(1,1,n,l,r,v); } 
        }
        return 0;
    }
    
  • 相关阅读:
    git 简单操作
    JS中substr与substring的区别
    手写map, filter函数
    node之pipe
    nodejs之child_process
    node真的是单线程模式吗
    【xinsir】分享一个查找文件的脚手架
    【xinsir】函数库,持续更新
    数组循环方法统计
    20190916
  • 原文地址:https://www.cnblogs.com/zzhzzh123/p/13399300.html
Copyright © 2020-2023  润新知