竞赛讨论区 > 求助,g题是哪里错了
头像
acarofpigs
发布于 02-06 22:35
+ 关注

求助,g题是哪里错了

#include<bits/stdc++.h>

using ll = long long;

#define endl '\n'

struct node{

    int l,r;

    ll val;

};

std::vector<node> t;

std::vector<ll> v;

int n;

void modify(int p,int x,int y){

    if(t[p].l==t[p].r){

        t[p].val=y;

        return;

    }

    int mid=(t[p].l+t[p].r)/2;

    if(x<=mid)modify(p*2,x,y);

    else modify(p*2+1,x,y);

    t[p].val=t[p*2].val+t[p*2+1].val;

}

void build(int p=1,int l=1,int r=n){

    t[p].l=l,t[p].r=r;

    if(l==r){

        t[p].val=v[l];

        return;

    }

    int mid=(l+r)/2;

    build(p*2,l,mid);

    build(p*2+1,mid+1,r);

    t[p].val=t[p*2].val+t[p*2+1].val;

}

ll query(int p,int l,int r){

    if(t[p].r<l||t[p].l>r){

        return 0;

    }

    if(t[p].l>=l&&t[p].r<=r){

        return t[p].val;

    }

    int mid=(t[p].l+t[p].r)/2;

    return query(p*2,l,r)+query(p*2+1,l,r);

}

signed main(){

    std::ios::sync_with_stdio(0);

    std::cin.tie(0);

    std::cout.tie(0);

    int tt;

    std::cin>>tt;

    while(tt--){

    int q;

    std::cin>>n>>q;

    v.assign(n+1,0);

    t.assign(((n+2)<<2),{0,0,0});

    for(int i=1;i<=n;i++){

        std::cin>>v[i];

    }

    build();

    while(q--){

        int a,b,c;

        std::cin>>a>>b>>c;

        if(a==1){

            modify(1 ,b,c);

        }else{

            std::cout<<query(1,b,c-1)-query(1,c,c)<<endl;

        }

    }

}  }

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐