首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >构建分段树时出现C++分段故障

构建分段树时出现C++分段故障
EN

Stack Overflow用户
提问于 2018-06-10 01:48:53
回答 1查看 245关注 0票数 1

我正在尝试建立一个分段树,以便在给定的数组间隔内计算具有最大和的子数组…(针对每个查询)

我在函数"void build()“中遇到了分段错误,我用数组size....this检查过,当数组大小较大时,small...but会出现分段错误。

提前感谢:)

代码语言:javascript
复制
success test case:
3 
-1 2 3
1
1 2
2

seg fault test case:
90
324 3 23 -234 32 -4 324 435 -5775
324 3 23 -234 32 -4 324 435 -5775
324 3 23 -234 32 -4 324 435 -5775
324 3 23 -234 32 -4 324 435 -5775
324 3 23 -234 32 -4 324 435 -5775
324 3 23 -234 32 -4 324 435 -5775
324 3 23 -234 32 -4 324 435 -5775
324 3 23 -234 32 -4 324 435 -5775
324 3 23 -234 32 -4 324 435 -5775
324 3 23 -234 32 -4 324 435 -5775
9
1 4
3 5
5 9
1 40
2 50
5 90
10 40
50 90
30 50
代码语言:javascript
复制
<pre><code>
#include<iostream>
#include<limits.h>
#include<math.h>
using namespace std;

typedef struct node node;
struct node{
    long int sum;
    long int lbest;
    long int rbest;
    long int max;
};


void build(node *tree , long int n , long int start , long int end , long int *ar ){
    if(start == end){
        tree[n].sum = tree[n].lbest = tree[n].rbest = tree[n].max = ar[start];
        return ;
    }
    else{
    long int mid = (start + end)/2;
    build(tree , (2*n) +1 , start , mid , ar);
    build(tree , (2*n) +2 , mid+1 , end , ar);

    tree[n].sum = tree[2*n+1].sum + tree[2*n+2].sum;
    tree[n].lbest = max(tree[2*n+1].lbest , tree[2*n+1].sum + tree[2*n+2].lbest);
    tree[n].rbest = max(tree[2*n+2].rbest , tree[2*n+2].sum + tree[2*n+1].rbest);
    tree[n].max = max(tree[n].sum , max(tree[n].lbest , tree[n].rbest));
 //     cout<<start<<" "<<end<<" -- "<<n<<" ";
 //     cout<<" else "<<endl;

    }

}

long int query(node *tree , long int  n , long int l , long int r , long int start , long int end){
    if(l > end || r < start)return INT_MIN;
    if(start >= l && end <= r)return tree[n].max;
    long int mid = (start + end)/2;
    return max(query(tree, (n*2)+1 , l , r , start , mid) , query(tree , 2*n+2 , l , r, mid +1 , end));
}




int main(){
    // ios_base::sync_with_stdio(false);
    // cin.tie(NULL);
    // cout.tie(NULL);


    long int n , q;
    scanf("%ld" , &n);

    long int ar[n];
    for(long int i = 0 ;i< n ; i++)cin>>ar[i];

    long int nn = n*2;
    node tree[nn+1];
    build(tree, 0 ,0,n-1 ,ar);

    scanf("%ld" , &q);

    while(q--){
        long a , b ;
        scanf("%ld %ld" , &a ,&b);
            a-- ;b--;
        printf("%ld\n" ,query(tree, 0 , a , b, 0 , n-1));
    }



    return 0;
}




</code></pre>
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50776992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档