这是我的线段树的一份代码,然而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;
}