• P3372 【模板】线段树 1


    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxx=100010;
    int n,m,a[maxx],add[maxx*4];
    long long sum[maxx*4];
    void build(int k,int l,int r)
    {
        if(l==r)
        {
            sum[k]=a[l];
            return;
        }
        int mid=(l+r)>>1;
        build(k<<1,l,mid);
        build(k<<1|1,mid+1,r);
        sum[k]=sum[k<<1]+sum[k<<1|1];
    }
    
    void Add(int k,int l,int r,int v)
    {
        add[k]+=v;
        sum[k]+=(long long)v*(r-l+1);
    }
    
    void pushdown(int k,int l,int r,int mid)
    {
        if(add[k]==0) return;
        Add(k<<1,l,mid,add[k]);
        Add(k<<1|1,mid+1,r,add[k]);
        add[k]=0;
    }
    
    long long query(int k,int l,int r,int x,int y)
    {
        if(l>=x&&r<=y) return sum[k];
        int mid=(l+r)>>1;
        long long res=0;
        pushdown(k,l,r,mid);
        if(x<=mid) res+=query(k<<1,l,mid,x,y);
        if(mid<y) res+=query(k<<1|1,mid+1,r,x,y);
        return res;
    }
    
    void modify(int k,int l,int r,int x,int y,int v)
    {
        if(l>=x&&r<=y) return Add(k,l,r,v);
        int mid=(l+r)>>1;
        pushdown(k,l,r,mid);
        if(x<=mid) modify(k<<1,l,mid,x,y,v);
        if(mid<y) modify(k<<1|1,mid+1,r,x,y,v);
        sum[k]=sum[k<<1]+sum[k<<1|1];
    }
    int main()
    {
        int i;
        cin>>n>>m;
        for(i=1;i<=n;i++)
            cin>>a[i];
        build(1,1,n);
        while(m--)
        {
            int qwq,start,end,f;
            cin>>qwq;
            if(qwq==1)
            {
                cin>>start>>end>>f;
                modify(1,1,n,start,end,f);
            }
            if(qwq==2)
            {
                cin>>start>>end;
                long long ans=query(1,1,n,start,end);
                printf("%lld
    ",ans);
            }
        }
        return 0;
    }
    

    背下来(

  • 相关阅读:
    LeetCode之移除元素
    有被开心到hh(日常)
    交换排序
    插入排序
    顺序查找&折半查找
    C++之引用
    MySQL学习笔记
    C/C++程序编译过程
    计算机面试知识整合(更新中...)
    MFC之编辑框
  • 原文地址:https://www.cnblogs.com/LSWorld/p/9683739.html
Copyright © 2020-2023  润新知