C++:段树中的运行时错误

C++ : Runtime error in Segment trees

本文关键字:运行时错误 段树中 C++      更新时间:2023-10-16

我正在尝试实现用于修改和范围产品查询的段树(范围内所有元素的乘积)。以下是我的代码:

using namespace std;
const int N = 1e4;  
long long int n;  // array size
int t[2 * N];
void build() {  // build the tree
    for (int i = n - 1; i > 0; --i) t[i] = t[i<<1] * t[i<<1|1];
}
void modify(int p, int value) {  // set value at position p
    for (t[p += n] = value; p > 1; p >>= 1) t[p>>1] = t[p] + t[p^1];
}
int query(int l, int r) {  // sum on interval [l, r)
    int res = 1;
    for (l += n, r += n; l < r; l >>= 1, r >>= 1) {
        if (l&1) res *= t[l++];
        if (r&1) res *= t[--r];
    }
    return res;
}
int main()
{
    int t;
    scanf("%d", &t);
    cout<<"t="<<t<<"n";
    while(t--)
    {
        long long int  q,p;
        scanf("%lld %lld %lld", &n, &q, &p);
        cout<<"n="<<n<<"q="<<q<<"p="<<p<<"n"; 
        for (int i = 0; i < n; ++i)
        scanf("%d", t + n + i);
        build();
        while(q--)
        {
            //do queries
        }
    }
    return 0;
}

我厌倦了调试它。以下陈述是有问题的:

long long int  q,p;
scanf("%lld %lld %lld", &n, &q, &p);
for (int i = 0; i < n; ++i)
    scanf("%d", t + n + i);

此代码给出运行时错误当我注释掉代码成功运行t+n+i或不扫描n时,代码运行良好。但是我需要扫描它们两个。

有人可以帮助我吗?

我认为代表段树的数组 t 的大小不够大。尝试使用4 * N,看看是否有效。

int t[4 * N];