社区讨论
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 条回复,欢迎继续交流。
正在加载回复...