C++:段树中的运行时错误
C++ : Runtime error in Segment trees
我正在尝试实现用于修改和范围产品查询的段树(范围内所有元素的乘积)。以下是我的代码:
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];
相关文章:
- c++中的指针和运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- Leetcode 540 上的运行时错误.排序数组中的单个元素
- 类方法 - 数据结构中 For 循环的运行时错误
- 运行时错误地址清理器:LEETCODE 中的致命信号
- 在Hackerearth上获取运行时错误(SIGSEGV),无法找出代码中的问题
- glfw 的基本设置会导致与 emscripten 生成的 js 文件中的事件侦听器有关的运行时错误
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- SPOJ中的运行时错误
- 为什么我在此代码中收到运行时错误
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 由于 2D 数组声明,C++ 14 中的运行时错误
- 矢量的 c++ 代码中的运行时错误
- 在VS2015中访问类成员时运行时错误,但在Linux上未访问时出错
- Qt 应用程序中与Qt版本相关的运行时错误
- 我的代码中出现运行时错误的可能原因是什么?
- 树节点之间的最大距离中的运行时错误
- VC 中的运行时错误,但不在GCC中
- C++:段树中的运行时错误