社区讨论

RE玄关求调

P2357守墓人参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m2iffjz5
此快照首次捕获于
2024/10/21 10:58
去年
此快照最后确认于
2025/11/04 16:38
4 个月前
查看原帖
全RE了
Runtime Error. Received signal 11:Segmentation faultwith invalid memory reference.
CPP
#include <bits/stdc++.h>
using namespace std;
#define Formylove return 0;
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "W", stdout)
#define ls idx << 1
#define rs ls | 1
#define int long long
template <typename T>
void read(T &x)
{
    char ch = getchar();
    x = 0;
    T f = 1;
    while (ch != '-' && (ch < '0' || ch > '9'))
        ch = getchar();
    if (ch == '-')
        f = -1, ch = getchar();
    for (; ch >= '0' && ch <= '9'; ch = getchar())
        x = x * 10 + ch - '0';
    x *= f;
}
template <typename T>
void write(T x, bool flag)
{
    x < 0 ? x = -x, putchar('-') : 0;
    static short Stack[50], top(0);
    do
        Stack[++top] = x % 10, x /= 10;
    while (x);
    while (top)
        putchar(Stack[top--] | 48);
    flag ? putchar('\n') : putchar(' ');
}
int n, f;
int a[200005];
int opt;
struct node {
    int l, r, sum, lazy;
} tree[1000005];
void pushup(int idx) {
    tree[idx].sum = tree[ls].sum + tree[rs].sum;
}
void build (int l, int r, int idx) {
    if (l == r) {
        tree[idx] = {l, r, a[l], 0};
        return ;
    }
    tree[idx] = {l, r, 0, 0};
    int mid = (l + r) >> 1;
    build(l, mid, ls);
    build(mid + 1, r, rs);
    pushup(idx);
}
void pushdown (int idx) {
    if (tree[idx].lazy) {
        tree[ls].sum += (tree[ls].r - tree[ls].l + 1) * tree[idx].lazy;
        tree[rs].sum += (tree[rs].r - tree[rs].l + 1) * tree[idx].lazy;
        tree[ls].lazy += tree[idx].lazy;
        tree[rs].lazy += tree[idx].lazy;
        tree[idx].lazy = 0;
    }
}
void mdf (int idx, int l, int r, int add) {
    if (l <= tree[idx].l and tree[idx].r <= r) {
        tree[idx].sum += add * (tree[idx].r - tree[idx].l + 1);
        tree[idx].lazy += add;
        return ;
    }
    int mid = (tree[idx].l + tree[idx].r) >> 1;
    pushdown(idx);
    if (l <= mid) {
        mdf (ls, l, r, add);
    }
    if (r > mid) {
        mdf (rs, l, r, add);
    }
    pushup(idx);
}
int qry (int l, int r, int idx) {
    int sum = 0;
    if (l <= tree[idx].l and tree[idx].r <= r) {
        return tree[idx].sum;
    }
    pushdown(idx);
    int mid = (l + r) >> 1;
    if (l <= mid) {
        sum += qry (l, r, ls);
    }
    if (r > mid) {
        sum += qry(l, r, rs);
    }
    return sum;
}
signed main() {
    //file("");
    int l, r, k;
    read(n), read(f);
    for (int i = 1; i <= n; ++i) {
        read(a[i]);
    }
    build(1, n, 1);
    for (int i = 1; i <= f; ++i) {
        read(opt);
        if (opt == 1) {
            read(l), read(r), read(k);
            mdf(1, l, r ,k);
        }
        else if (opt == 2) {
            read(k);
            mdf(1, 1, 1, k);
        }
        else if (opt == 3) {
            read(k);
            mdf(1, 1, 1, 0 - k);
        }
        else if (opt == 4) {
            read(l), read(r);
            cout << qry(l, r, 1) << '\n';
        }
        else {
            cout << qry (1, 1, 1) << '\n';
        }
    }
    Formylove
}

回复

5 条回复,欢迎继续交流。

正在加载回复...