社区讨论
95pts WA on #18 求 hack
P12013[Ynoi April Fool's Round 2025] 牢夸参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mkqms6mx
- 此快照首次捕获于
- 2026/01/23 16:40 4 周前
- 此快照最后确认于
- 2026/02/11 02:32 上周
CPP
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
#define int long long
int a[N];
struct segtree {
int tree[4 * N], tag[4 * N];
void pushup(int x) { tree[x] = max(tree[x*2], tree[x*2+1]); }
void pushdown(int x, int l, int r) {
int mid = (l + r) >> 1;
tag[x*2] += tag[x]; tag[x*2+1] += tag[x];
tree[x*2] += tag[x];
tree[x*2+1] += tag[x];
tag[x] = 0;
} void update(int x, int l, int r, int L, int R, int y) {
if(L > r || R < l) return ;
if(L <= l && r <= R) {
tree[x] += y;
tag[x] += y; return ;
} pushdown(x, l, r); int mid = (l + r) >> 1;
update(x*2, l, mid, L, R, y); update(x*2+1, mid+1, r, L, R, y);
pushup(x);
} int query(int x, int l, int r, int L, int R) {
if(L > r || R < l) return -1e6;
if(L <= l && r <= R) return tree[x];
pushdown(x, l, r); int mid = (l + r) >> 1;
return max(query(x*2, l, mid, L, R), query(x*2+1, mid+1, r, L, R));
}
} seg[3];
signed main() {
int n, m; cin >> n >> m;
for(int i = 1;i <= n;i++) cin >> a[i];
for(int i = 1;i <= n;i++)
seg[1].update(1, 1, n, i, i, a[i] + a[i+1]),
seg[2].update(1, 1, n, i, i, a[i] + a[i+1] + a[i+2]);
for(int i = 1;i <= m;i++) {
int opt, l, r, k; cin >> opt >> l >> r;
if(opt == 1) {
cin >> k;
seg[1].update(1, 1, n, l, r, k);
seg[1].update(1, 1, n, max(l - 1, 1ll), max(r - 1, 1ll), k);
seg[2].update(1, 1, n, l, r, k);
seg[2].update(1, 1, n, max(l - 1, 1ll), max(r - 1, 1ll), k);
seg[2].update(1, 1, n, max(l - 2, 1ll), max(r - 2, 1ll), k);
} else {
int x = seg[1].query(1, 1, n, l, r - 1);
int y = (l + 1 < r ? seg[2].query(1, 1, n, l, r - 2) : -1e6);
if((3 * x) > (2 * y)) {
int z = abs(__gcd(x, 2ll));
cout << x / z << "/" << 2 / z << endl;
} else {
int z = abs(__gcd(y, 3ll));
cout << y / z << "/" << 3 / z << endl;
}
}
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...