线段树求助
查看原帖
线段树求助
681351
Tobiichi_Origami楼主2022/10/6 10:15
#include<bits/stdc++.h>
using namespace std;
struct tree{
    int l,r,sum=0;
}t[10000001];
int n,m;
void pushup(int u)
{
    int tmp=t[u<<1].sum+t[u<<1|1].sum;
    t[u].sum=tmp;
}
void build(int u,int l,int r)
{
    t[u].l=l;t[u].r=r;
    if(l==r) return;
    int mid=(l+r)>>1;
    build(u<<1,l,mid);
    build(u<<1|1,mid+1,r);
}
void modify(int u,int pos,int x)
{
    if(t[u].l==pos&&t[u].r==pos) 
        t[u].sum+=x;
    else
    {
        int mid=(t[u].l+t[u].r)>>1;
        if(pos<=mid) modify(u<<1,pos,x);
        else modify(u<<1|1,pos,x);
        pushup(u);
    }
}
int query(int u,int l,int r)
{
    if(t[u].l>=l&&t[u].r<=r)
        return t[u].sum;
    int mid=(t[u].l+t[u].r)>>1,res=0;
    if(mid>=l) res+=query(u<<1,l,r);
    if(mid<r) res+=query(u<<1|1,l,r);
    return res;
}
signed main()
{
    cin>>n>>m;
    build(1,1,n);
    while(m--)
    {
        char op;
        cin>>op;
        if(op=='x')
        {
            int x,y;
            cin>>x>>y;
            modify(1,x,y);
        }
        else
        {
            int x,y;
            cin>>x>>y;
            cout<<query(1,x,y)<<endl;
        }
    }
}

样例过了,但是测的时候爆零了。求助dalao帮我这个小蒟蒻看看

2022/10/6 10:15
加载中...