POJ-3468-A Simple Problem with Integers(区间求和 模板)

题目

模板。不说了。去吃饭啦啦啦啦啦啦啦啦啦啦啦。

#include <cstring>
#include <cstdio>
#define  m(a,b) memset(a,b,sizeof a)
typedef long long ll;
using namespace std;
const int N=300005;
ll ans[N],tag[N];
void build(int l,int r,int pos)
{
    if(l==r)
    {
        scanf("%lld",&ans[pos]);
        return;
    }
    int mid=(l+r)>>1;
    build(l,mid,pos<<1);
    build(mid+1,r,pos<<1|1);
    ans[pos]=ans[pos<<1]+ans[pos<<1|1];
}
void pushdown(int ln,int rn,int pos)
{
    if(!tag[pos])
        return;
    tag[pos<<1]+=tag[pos];
    tag[pos<<1|1]+=tag[pos];
    ans[pos<<1]+=tag[pos]*(ll)(ln);
    ans[pos<<1|1]+=tag[pos]*(ll)(rn);
    tag[pos]=0;
}
void chanpoint(int n,ll val,int l,int r,int pos)
{
    if(l==r)
         ans[pos]=val;
    int mid=(l+r)>>1;
    if(n<=mid)
        chanpoint(n,val,l,mid,pos<<1);
    else
        chanpoint(n,val,mid+1,r,pos<<1|1);
    ans[pos]=ans[pos<<1]+ans[pos<<1|1];
}
void chanspan(int cl,int cr,ll val,int l,int r,int pos)
{
    if(cl<=l&&r<=cr)
    {
        ans[pos]+=val*(ll)(r-l+1);
        tag[pos]+=val;
        return;
    }
    int mid=(l+r)>>1;
    pushdown(mid-l+1,r-mid,pos);
    if(cl<=mid)
        chanspan(cl,cr,val,l,mid,pos<<1);
    if(cr>mid)
        chanspan(cl,cr,val,mid+1,r,pos<<1|1);
    ans[pos]=ans[pos<<1]+ans[pos<<1|1];
}
ll query(int cl,int cr,int l,int r,int pos)
{
    if(cl<=l&&r<=cr)
        return ans[pos];
    int mid=(l+r)>>1;
    pushdown(mid-l+1,r-mid,pos);
    ll ans=0;
    if(cl<=mid)
        ans+=query(cl,cr,l,mid,pos<<1);
    if(cr>mid)
        ans+=query(cl,cr,mid+1,r,pos<<1|1);
    return ans;
}
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    build(1,n,1);
    m(tag,0);
    int a,b;
    char ch;
    ll c;
    while(m--)
    {
        getchar();
        scanf("%c",&ch);
        if(ch=='Q')
        {
            scanf("%d%d",&a,&b);
            printf("%lld\n",query(a,b,1,n,1));
        }
        else
        {
            scanf("%d%d%lld",&a,&b,&c);
            chanspan(a,b,c,1,n,1);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42576687/article/details/87875380