zoukankan      html  css  js  c++  java
  • E

    
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    using namespace std;
    #define N 100002
    struct node
    {
        int l,r;
        long long lz,w;
    }q[4*N];
    void pushup(int rt)
    {
        q[rt].w=q[rt*2].w+q[rt*2+1].w;
    }
    void pushdown(int rt,int m)
    {
        if(q[rt].lz)
        {
            q[rt*2].lz+=q[rt].lz;
            q[rt*2+1].lz+=q[rt].lz;
            q[rt*2].w+=(m-m/2)*q[rt].lz;
            q[rt*2+1].w+=(m/2)*q[rt].lz;
            q[rt].lz=0;
        }
    }
    void build(int l,int r,int rt)
    {
        q[rt].l=l;
        q[rt].r=r;
        q[rt].lz=0;
        q[rt].w=0;
        if(l==r)
        {
            scanf("%lld",&q[rt].w);
            return ;
        }
        build(l,(r+l)/2,rt*2);
        build((r+l)/2+1,r,rt*2+1);
        pushup(rt);
    }
    void update(int key,int ll,int rr,int l,int r,int rt)
    {
        if(ll<=l&&rr>=r)
        {
            q[rt].w+=(long long)key*(r-l+1);
            q[rt].lz+=key;
            return ;
        }
        pushdown(rt,r-l+1);
        int m=(r+l)/2;
        if(ll<=m)
        update(key,ll,rr,l,m,rt*2);
        if(rr>m)
        {
            update(key,ll,rr,m+1,r,rt*2+1);
        }
        pushup(rt);
    }
    long long query(int ll,int rr,int l,int r,int rt)
    {
        if(ll<=l&&rr>=r)
        {
            return q[rt].w;
        }
        pushdown(rt,r-l+1);
        int m=(r+l)/2;
        long long L=0;
        if(ll<=m) L+=query(ll,rr,l,m,rt*2);
        if(rr>m) L+=query(ll,rr,m+1,r,rt*2+1);
        return L;
    }
    int main()
    {
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            build(1,n,1);
            while(m--)
            {
                char op[10];
                int a , b , c;
                scanf("%s",op);
                if (op[0] == 'Q')
                {
                    scanf("%d%d",&a,&b);
                    long long tt=query(a,b,1,n,1);
                    printf("%lld
    ",tt);
                }
                else if(op[0]=='C')
                {
                    scanf("%d%d%d",&a,&b,&c);
                    update(c,a,b,1,n,1);
                }
            }
        }
        return 0;
    
    }
  • 相关阅读:
    苑举正相关视频
    pdf怎么转换成word
    Qt架构图及模块分析介绍
    读残雪的《趋光运动 : 回溯童年的精神图景》笔记
    Qt之美(一):D指针/私有实现
    十大美国大学网络公开课
    网络公开课和MOOC资源
    网络课程网站
    Qt源码学习之路(2) QCoreApplication(1)
    xshell如何导入.xsh 文件
  • 原文地址:https://www.cnblogs.com/yangyongqian/p/3903400.html
Copyright © 2011-2022 走看看