请问大佬为啥我的代码一直是Segmention Fault
查看原帖
请问大佬为啥我的代码一直是Segmention Fault
960410
aru123楼主2023/5/28 18:51
#include <iostream>
#include <bits/stdc++.h>
#define ll long long
using namespace std;

template <typename type>
inline void read(type& x){
    bool f = 0; x = 0; char c = getchar();
    while(c < '0' || c > '9'){f = c == '-'; c = getchar();}
    while(c >= '0' && c <= '9'){x = (x << 3) + (x << 1) + (c ^ 48); c = getchar();}
    if(f) x = -x;
}

const int maxN = 1000005;
int rooms[maxN], tree[4 * maxN], lazy[4 * maxN];

void buildTree(int l, int r, int p){
    if(l == r){
        tree[p] = rooms[l];
        return ;
    }
    int m = (r - l) / 2 + l;
    buildTree(l, m, 2 * p);
    buildTree(m + 1, r, 2 * p + 1);
    tree[p] = min(tree[2 * p], tree[2 * p + 1]);
}

void down(int p){
    lazy[2 * p] += lazy[p];
    lazy[2 * p + 1] += lazy[p];
    tree[2 * p] -= lazy[p];
    tree[2 * p + 1] -= lazy[p];
    lazy[p] = 0;
}

void updata(int l, int r, int s, int t, int p, int c){
    if(r >= t && l <= s){
        lazy[p] += c;
        tree[p] -= c;
        return ;
    }
    if(lazy[p]){
        down(p);
    }
    int m = (t - s) / 2 + s;
    if(m >= l){
        updata(l, r, s, m, 2 * p, c);
    }
    if(m < r){
        updata(l, r, s, m, 2 * p + 1, c);
    }
    tree[p] = min(tree[2 * p], tree[2 * p + 1]);
}

int query(int l, int r, int s, int t, int p){
    if(r >= t && l <= s){
        return tree[p];
    }
    if(lazy[p]){
        down(p);
    }
    int m = (t - s) / 2 + s;
    int res = INT32_MAX;
    if(m >= l){
        res = min(query(l, r, s, m, 2 * p), res);
    }
    if(m < r){
        res = min(query(l, r, m + 1, r, 2 * p + 1), res);
    }
    return res;
}

int main(){
    int n, m;
    read(n), read(m);
    for(int i = 1; i <= n; i++){
        read(rooms[i]);
    }
    memset(lazy, 0, sizeof(lazy));
    buildTree(1, n, 1);
    for(int i = 1; i <= m; i++){
        int k, l, r;
        read(k), read(l), read(r);
        if(query(l, r, 1, n, 1) < k){
            printf("-1\n");
            printf("%d", i);
            break;
        }
        updata(l, r, 1, n, 1, k);
        if(i == m){
            printf("0");
        }
    }
    return 0;
}
2023/5/28 18:51
加载中...