问噶问题
  • 板块学术版
  • 楼主Alea
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/10/19 23:24
  • 上次更新2023/10/27 06:50:02
查看原帖
问噶问题
322792
Alea楼主2022/10/19 23:24

这是我的线段树的一份代码,然而rangesum函数却爆掉了栈,为什么&怎么办?

#include <iostream>
#define size 100001
using namespace std;
int n,iv[size],seg[size];
void build(int b,int e,int o){
    if(b==e) seg[o]=iv[b];
    else{
        int m=b+(e-b)/2;
        build(b,m,o*2),build(m+1,e,o*2+1);
        seg[o]=seg[o*2]+seg[o*2+1];
    }
}
int rangesum(int l,int r,int b,int e,int o){
    /*
        l------r
         b----e
    */
    if(l<=b&&e<=r) return seg[o];
    else if(b<=l&&r<=e) return 0;
    else{
        int m=e+(b-e)/2,ret=0;
        /*
            l------r
           b--m--e
        */
        if(l<=m) ret+=rangesum(l,r,b,m,o);
        /*
            l------r
                 b--m--e
        */
        if(m<=r) ret+=rangesum(l,r,m+1,e,o);
        return ret;
    }
}
int main(){
    int m;
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>iv[i];
    build(1,n,1);
    for(int i=1;i<=m;i++){
        int op;
        cin>>op;
        if(op==1){
            int x,y,k;
            cin>>x>>y>>k;
        }else if(op==2){
            int x,y;
            cin>>x>>y;
            cout<<rangesum(x,y,1,n,1)<<endl;
        }
    }
    return 0;
}
2022/10/19 23:24
加载中...