蒟蒻悬棺求调 后三个点WA

P3372 【模板】线段树 1

Crouy_Li_Dorac @ 2024-08-02 13:11:27

rt

线段树写法后三个大数据WA了,不解QAQ

#include<bits/stdc++.h>
#define ll long long
const int N=1e5+20;
using namespace std;
ll n,m;
ll a[N];
ll tree[4*N];
ll tag[4*N];
ll ls(ll p){return p<<1;}
ll rs(ll p){return p<<1|1;}
void push_up(ll p){
    tree[p]=tree[ls(p)]+tree[rs(p)];
}
void build(ll p,ll pl,ll pr){
    tag[p]=0;
    if(pl==pr){tree[p]=a[pl];return;}
    ll mid=(pl+pr)>>1;
    build(ls(p),pl,mid);
    build(rs(p),mid+1,pr);
    push_up(p);
}
void addtag(ll p,ll pl,ll pr,ll d){
    tag[p]+=d;
    tree[p]+=d*(pr-pl+1);
}
void push_down(ll p,ll pl, ll pr){
    if(tag[p]){
        ll mid=(pl+pr)>>1;
        addtag(ls(p),pl,mid,tag[p]);
        addtag(rs(p),mid+1,pr,tag[p]);
        tag[p]=0;
    }
}
void update(ll l,ll r,ll p,ll pl,ll pr,ll d){
    if(l<=pl&&r>=pr){
        addtag(p,pl,pr,d);
        return;
    }
    push_down(p,pl,pr);
    ll mid=(pl+pr)>>1;
    if(l<=mid)  update(l,r,ls(p),pl,mid,d);
    if(r>mid)   update(l,r,rs(p),mid+1,pr,d);
    push_up(p);
}
ll query(ll l,ll r,ll p,ll pl,ll pr){
    if(pl>=l&&r>=pr)    return tree[p];
    push_down(p,pl,pr);
    ll res=0;
    ll mid=(pr+pl)>>1;
    if(mid>=l)  res+=query(l,r,ls(p),pl,mid);
    if(r>mid)   res+=query(l,r,rs(p),mid+1,pr);
    return res;
}
int main(){
    scanf("%lld%lld",&n,&m);
    for(ll i=1;i<=n;i++)    scanf("%lld",&a[i]);
    build(1,1,n);
    while(m--){
        ll q,l,r,d;
        scanf("%lld",&q);
        if(q==1){
            scanf("%lld%lld%lld",&l,&r,&d);
            update(l,r,1,1,n,d);
        }
        if(q==2){
            scanf("%lld%lld",&l,&r);
            printf("%d\n",query(l,r,1,1,n));
        }
    }
    return 0;
}

玄关求dalao赐教


by Epi4any @ 2024-08-02 13:23:11

@Crouy_Li_Dorac 你最后输出忘记改成 lld


by Epi4any @ 2024-08-02 13:23:31

printf("%lld\n",query(l,r,1,1,n));

by lianchanghua @ 2024-08-02 13:30:17

@Crouy_Li_Dorac 下载了样例,你的程序输出有负数


by lianchanghua @ 2024-08-02 13:31:21

@Crouy_Li_Dorac 建议在编译器选项中添加:-Wall


by Crouy_Li_Dorac @ 2024-08-02 13:43:18

@Faith_toChange 好的谢谢大佬,已关


by Crouy_Li_Dorac @ 2024-08-02 13:43:59

@lianchanghua 好的谢谢,已关


|