线段树1板子

Posted darlingroot

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线段树1板子相关的知识,希望对你有一定的参考价值。

咕咕咕

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
inline ll read()
{
    ll sum=0,p=1;
    char ch=getchar();
    while(ch<0||ch>9)
    {
        if(ch==-)
            p=-1;
        ch=getchar();
    }
    while(ch>=0&&ch<=9)
    {
        (sum*=10)+=ch-0;
        ch=getchar();
    }
    return sum*p;
}
const int N=100005;
int n,m;
ll lazy[N*4],sum[N*4];

ll don(ll x,ll l,ll r)
{
    if(lazy[x])
    {
        ll mid=(l+r)>>1;
        lazy[x*2]+=lazy[x];
        sum[x*2]+=(mid-l+1)*lazy[x];
        lazy[x*2+1]+=lazy[x];
        sum[x*2+1]+=(r-mid)*lazy[x];
        lazy[x]=0;
    }
}

void add(ll x,ll l,ll r,ll ql,ll qr,ll y)
{
    if(l==ql&&r==qr)
    {
        sum[x]+=(r-l+1)*y;
        lazy[x]+=y;
        return;
    }
    don(x,l,r);
    ll mid=(l+r)>>1;
    if(qr<=mid)
        add(x*2,l,mid,ql,qr,y);
    else if(ql>mid)
        add(x*2+1,mid+1,r,ql,qr,y);
    else
    {
        add(x*2,l,mid,ql,mid,y);
        add(x*2+1,mid+1,r,mid+1,qr,y);
    }
    sum[x]=sum[x*2]+sum[x*2+1];
}

ll query(ll x,ll l,ll r,ll ql,ll qr)
{
    if(l==ql&&r==qr)
    {
        return sum[x];
    }
    don(x,l,r);
    ll mid=(l+r)>>1;
    if(qr<=mid)
        return query(x*2,l,mid,ql,qr);
    else if(ql>mid)
        return query(x*2+1,mid+1,r,ql,qr);
    else
        return query(x*2,l,mid,ql,mid)+query(x*2+1,mid+1,r,mid+1,qr);
}

int main()
{
    n=read(),m=read();
    for(int i=1; i<=n; i++)
    {
        ll a=read();
        add(1,1,n,i,i,a);
    }
    while(m--)
    {
        int opt=read();
        if(opt==1)
        {
            ll x=read(),y=read(),k=read();
            add(1,1,n,x,y,k);
        }
        else if(opt==2)
        {
            ll x=read(),y=read();
            printf("%lld
",query(1,1,n,x,y));
        }
    }
    return 0;
}

 

以上是关于线段树1板子的主要内容,如果未能解决你的问题,请参考以下文章

线段树板子

hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)

poj2777(线段树)

7.8集训模拟赛(忘记板子)

权值线段树板子题

算法训练 操作格子 线段树板子题