main里调用了这个函数:
运行信息:
就是RE了
程序输出:
通过以上信息可以说明,在此函数内111和222夹着的部分(也就是cin那一行)出现了运行错误,不知道为什么cin还会出错???求助!
附完整代码:
#include <bits/stdc++.h>
using namespace std;
#define maxn 400005
#define L(x) ((x) * 2)
#define R(x) ((x) * 2 + 1)
int n, m;
int a[100005], tr[maxn];
int lazy[maxn];
void pushup(int x){
tr[x] = tr[L(x)] + tr[R(x)];
}
void _(int p, int x, int l, int r){
tr[p] += (r - l + 1) * x;
lazy[p] += x;
}
void push_down(int p, int l, int r){
int mid = (l + r) / 2;
_(L(p), lazy[p], l, mid);
_(R(p), lazy[p], mid + 1, r);
lazy[p] = 0;
}
void init(int i, int l, int r){
if(l == r){
tr[i] = a[l];
return;
}
int mid = (l + r) / 2;
init(L(i), l, mid);
init(R(i), mid + 1, r);
pushup(i);
}
void update(int i, int l, int r, int x, int y, int v){
printf("UPD %d %d %d %d %d %d\n", i, l, r, x, y, v);
if(x <= l && r <= y){
_(i, v, l, r);
return;
}
push_down(i, l, r);
int mid = (l + r) / 2;
if(x <= mid) update(L(i), l, mid, x, y, v);
if(mid < y) update(R(i), mid + 1, r, x, y, v);
pushup(i);
}
int ask(int i, int l, int r, int x, int y){
printf("ASK %d %d %d %d %d\n", i, l, r, x, y);
if(x <= l && r <= y){
// _(i, v, l, r);
return tr[i];
}
push_down(i, l, r);
int mid = (l + r) / 2;
int ans = 0;
if(x <= mid) ans += ask(L(i), l, mid, x, y);
if(mid < y) ans += ask(R(i), mid + 1, r, x, y);
// pushup(p);
}
void handle_1(){
int x, y, k;
cin >> x >> y >> k;
update(1, 1, n, x, y, k);
}
void handle_2(){
int x, y;
cout << "111";
cin >> x >> y;
cout << "222";
cout << ask(1, 1, n, x, y) << endl;
}
int main(){
int n, q;
cin >> n >> q;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
init(1, 1, n);
while(q--){
int op;
// cout << "ouch";
cin >> op;
assert(op == 2);
if(op == 1) handle_1();
else handle_2();
cout << "ouch";
}
}
测试样例:
5 5
1 5 4 2 3
2 2 4
1 2 3 2
2 3 4
1 1 5 1
2 1 4