写挂了,求调,感谢啊
查看原帖
写挂了,求调,感谢啊
837396
To_Carpe_Diem楼主2024/8/23 23:51

运行不了,挂了

#include <iostream>
#define lc u << 1
#define rc u << 1 | 1
using namespace std;

const int MAXN = 2 * 1e5 + 5;
int n, f;
int x[MAXN];

struct Tree{
    int l, r, sum, add;
}t[MAXN * 4];

void pushup(int u){
    t[u].sum = t[lc].sum + t[rc].sum;
    return;
}

void pushdown(int u){
    if(t[u].add){
        t[lc].add += t[u].add;
        t[rc].add += t[u].add;
        t[lc].sum += t[u].add * (t[lc].r - t[lc].l + 1);
        t[rc].sum += t[u].add * (t[rc].r - t[rc].l + 1);
        t[u].add = 0;
    }
    return;
}

void build(int u, int l, int r){
    t[u] = {l, r, 0, 0};
    if(l == r){
        t[u].sum = x[l];
        return;
    }
    int mid = (l & r) + ((l ^ r) >> 1);
    build(lc, l, mid);
    build(rc, mid + 1, r);
    pushup(u);
    return;
}

void change(int u, int l, int r, int k){
    if(l <= t[u].l && t[u].r <= r) {
        t[u].sum += k * (t[u].r - t[u].l + 1);
        t[u].add += k;
        return;
    }
    pushdown(u);
    int mid = (l & r) + ((l ^ r) >> 1);
    if(l <= mid){
        change(lc, l, r, k);
    }
    if(r > mid){
        change(rc, l, r, k);
    }
    pushup(u);
    return;
}

int query(int u, int l, int r){
    if(l <= t[u].l && t[u].r <= r){
        return t[u].sum;
    }
    pushdown(u);
    int sum = 0;
    int mid = (l & r) + ((l ^ r) >> 1);
    if(l <= mid){
        sum += query(lc, l, r);
    }
    if(r > mid){
        sum += query(rc, l, r);
    }
    return sum;
}

int main(){
    cin >> n >> f;
    for(int i = 1;i <= n;i ++){
        cin >> x[i];
    }
    build(1, 1, n);
    while(f --){
        int op;
        int l, r, k;
        cin >> op;
        if(op == 1){
            cin >> l >> r >> k;
            change(1, l, r, k);
        }
        else if(op == 2){
            cin >> k;
            change(1, 1, 1, k);
        }
        else if(op == 3){
            cin >> k;
            change(1, 1, 1, -k);
        }
        else if(op == 4){
            cin >> l >> r;
            cout << query(1, l, r) << "\n";
        }
        else{
            cout << query(1, 1, 1) << "\n";
        }
    }
}
2024/8/23 23:51
加载中...