• [POJ3468]线段树区间修改


    #include<cstdio>
    using namespace std;
    const int N=1e6+10;
    typedef long long ll;
     
    ll sum[N*4],lazy[N*4],len[N*4]; 
    int n,m;
    void build(int id,int l,int r)
    {
        len[id]=r-l+1;
        if(l==r)
        {
            scanf("%lld",&sum[id]);
            return ;
        }
        int mid=(l+r)>>1;
        build(id<<1,l,mid);
        build(id<<1|1,mid+1,r);
        sum[id]=sum[id<<1]+sum[id<<1|1];
    }
    void pushdown(int id)
    {
        if(lazy[id])
        {
            lazy[id<<1]+=lazy[id];
            lazy[id<<1|1]+=lazy[id];
            
            sum[id<<1]+=len[id<<1]*lazy[id];
            sum[id<<1|1]+=len[id<<1|1]*lazy[id];
            lazy[id]=0;
        }
    }
    ll qu(int id,int l,int r,int ql,int qr)
    {
        if(ql<=l&&r<=qr)
        {
            return sum[id];
        }
        pushdown(id);
        int mid=(l+r)>>1;
        ll ans=0;
        if(ql<=mid) ans+=qu(id<<1,l,mid,ql,qr);
        if(qr>mid) ans+=qu(id<<1|1,mid+1,r,ql,qr);
        return ans;
    }
    void up(int id,int l,int r,int ql,int qr,ll val)
    {
        if(ql<=l&&r<=qr)
        {
            lazy[id]+=val;
            sum[id]+=len[id]*val;
            return ;
        }
        pushdown(id);
        int mid=(l+r)>>1;
        if(ql<=mid) up(id<<1,l,mid,ql,qr,val);
        if(qr>mid) up(id<<1|1,mid+1,r,ql,qr,val);
        sum[id]=sum[id<<1]+sum[id<<1|1];
    }
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            build(1,1,n);
            while(m--)
            {
                char s[5];
                scanf("%s",s);
                //printf("a[1].id:%d
    
    ",a[1].sum);
                if(s[0]=='Q')
                {
                    int x,y;
                    scanf("%d%d",&x,&y);
                    printf("%lld
    ",qu(1,1,n,x,y));
                }
                else
                {
                    int x,y;
                    ll z;
                    scanf("%d%d%lld",&x,&y,&z);
                    up(1,1,n,x,y,z);
                }
            }
        }
    }

     

  • 相关阅读:
    Qt下设置QLabel字体的大小和颜色
    C#之隐式与显示类型转换
    .NET入行之工作前
    再见2016
    C#之DataTable转List与List转Datatable
    .NET入行之工作后
    js判断是pc端还是移动端
    .net中的ContextSwitchDeadlock异常
    今天,我的博客开通啦
    ASP.NET的页面生命周期
  • 原文地址:https://www.cnblogs.com/liyexin/p/12588979.html
Copyright © 2020-2023  润新知