求助!cin >> x >> y; 竟然RE了
查看原帖
求助!cin >> x >> y; 竟然RE了
119181
Dynamic_Cast楼主2020/10/16 19:36

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
2020/10/16 19:36
加载中...