新手学线段树全WA 求助

P3372 【模板】线段树 1

zMinYu @ 2023-04-12 10:17:37

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+10;
struct node
{
    ll  l,r;
    ll num;
}tr[N*4];
ll a[N],lazy[N*4];
void pushup(ll u)
{
    tr[u].num=tr[u*2].num+tr[u*2+1].num;
}
void build(ll u,ll l,ll r)
{
    if(l==r)
    {
        tr[u].num=a[l];
        tr[u].l=l;
        tr[u].r=r;
    }
    else
    {
        tr[u].l=l;
        tr[u].r=r;
        int mid=(l+r)/2;
        build(u*2,l,mid);
        build(u*2+1,mid+1,r);
        pushup(u);
    }
}
//点修改
//void modify(int u,int l,int r,int x,int k) //将编号为x的值加k
//{
//  if(l==r)
//  {
//      tr[u].num=tr[u].num+k;
//  }
//  else
//  {
//      int mid=(l+r)/2;
//      if(x<=mid) modify(u*2,l,mid,x,k);
//      if(x>mid) modify(u*2,mid+1,r,x,k);
//      pushup(u);
//  }
//}
void pushdown(ll u,ll ln,ll rn)
{
    if(lazy[u])
    {
        lazy[u*2]+=lazy[u];
        lazy[u*2+1]+=lazy[u];
        tr[u*2].num+=lazy[u]*ln;
        tr[u*2+1].num+=lazy[u]*rn;
        lazy[u]=0;
    }
}
void modify(ll u,ll L,ll R,ll k)
{
    if(tr[u].l>=L&&tr[u].r<=R)
    {
        tr[u].num+=(tr[u].r-tr[u].l+1)*k;
        lazy[u]+=k;
    }
    else
    {
        ll mid=(tr[u].l+tr[u].r)/2;
        pushdown(u,mid-tr[u].l+1,tr[u].r-mid);
        if(L<=mid) modify(u*2,L,R,k);
        if(R>mid) modify(u*2+1,L,R,k);
        pushup(u);
    }
}
int query(ll u,ll L,ll R)
{
    if(tr[u].l>=L&&tr[u].r<=R)
    {
        return tr[u].num;
    }
    ll mid=(tr[u].l+tr[u].r)/2;
    ll ans=0;
    if(L<=mid) ans+=query(u*2,L,R);
    if(R>mid) ans+=query(u*2+1,L,R);
    return ans;
}
int main()
{
    ll n,m;cin>>n>>m;
    for(ll i=1;i<=n;i++)
    cin>>a[i];
    build(1,1,n);
    ll op,x,y,k;
    while(m--)
    {
        cin>>op;
        if(op==1)
        {
            cin>>x>>y>>k;
            modify(1,x,y,k);
        }
        else if(op==2)
        {
            cin>>x>>y;
            cout<<query(1,x,y)<<"\n";
        }
    }
    return 0;
}

by windows_fleon @ 2023-04-12 10:29:07

抓住一颗彩球!


by 听取MLE声一片 @ 2023-04-12 13:01:44

@jiuchaozhiyuan query 没 pushdown。

建议优化写法。


by zMinYu @ 2023-04-13 09:37:45

@听取MLE声一片 谢谢啊


|