社区讨论

WA 9pts求调

P4513小白逛公园参与者 3已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@m5we49nk
此快照首次捕获于
2025/01/14 19:29
去年
此快照最后确认于
2025/11/04 11:37
4 个月前
查看原帖
CPP
// Problem: P4513 小白逛公园
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P4513
// Memory Limit: 128 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 500010;
int n , m , b[N] , op , x , y;
struct node {
	int l ,  mid ,  r , sum , maxl , maxr , maxx;
} a[4 * N] , g;
void push_up (node &id , node &l , node &r) {
	id.sum = l.sum + r.sum;
	id.maxl = max (l.maxl , l.sum + r.maxl);
	id.maxr = max (r.maxr , r.sum + l.maxr);
	id.maxx = max (l.maxx , r.maxx);
	id.maxx = max (id.maxx , l.maxr);
	id.maxx = max (id.maxx , r.maxl);
	id.maxx = max (id.maxx , id.maxl);
	id.maxx = max (id.maxx , id.maxr);
	id.maxx = max (id.maxx , l.maxr + r.maxl);
	return;
}
void build (int l , int r , int id) {
	a[id].l = l; a[id].r = r;
	if (l == r) {
		a[id].sum = b[l];
		a[id].maxl = a[id].maxr = a[id].maxx = a[id].sum;
		return;
	}
	a[id].mid = (l + r) / 2;
	build (l , a[id].mid , id * 2);
	build (a[id].mid + 1 , r , id * 2 + 1);
	push_up (a[id] , a[id * 2] , a[id * 2 + 1]);
	return;
}
void change (int id) {
	if (a[id].r < x || a[id].l > x) return;
	if (a[id].l == a[id].r) {
		a[id].maxl = a[id].maxr = a[id].maxx = a[id].sum = y;
		return;
	}
	change (id * 2); change (id * 2 + 1);
	push_up (a[id] , a[id * 2] , a[id * 2 - 1]);
}
node find (int id) {
	if (a[id].l > y || a[id].r < x) return g;
	if (a[id].l >= x && a[id].r <= y) return a[id];
	if (x > a[id].mid) return find (id * 2 + 1);
	if (y <= a[id].mid) return find  (id * 2);
	node l = find (id * 2) , r = find (id * 2 + 1) , k;
	push_up (k , l , r);
	return k;
}
signed main () {
	cin >> n >> m; g.l = g.r = -1;
	for (int i = 1;i <= n;i ++) {
		cin >> b[i];
	}
	build (1 , n , 1);
	while (m --) {
		cin >> op >> x >> y;
		if (op == 1) {
			if (x > y) swap (x , y);
			cout << find (1).maxx << '\n';			
		}
		else {
			change (1);
		}
	}
	return 0;
} 

回复

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

正在加载回复...