YGW6 @ 2023-10-29 11:02:49
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n,m;
struct segment_tree
{
int l, r;
int lm, rm;
int sum, tmax;
}t[N * 4];
void push_up (int u)
{
t[u].lm = max (t[2 * n].lm, t[2 * n].sum + t[2 * n].lm);
t[u].rm = max (t[2 * n + 1].rm, t[2 * n].sum + t[2 * n].rm);
t[u].sum = t[2 * n].sum + t[2 * n + 1].sum;
t[u].tmax = max (max (t[2 * n].tmax, t[2 * n + 1].tmax), t[2 * n].rm + t[2 * n + 1].lm);
}
void build (int u, int l, int r)
{
t[u].l = l, t[u].r = r;
if (l == r)
{
scanf ("%d ", &t[u].sum);
t[u].lm = t[u].rm = t[u].tmax = t[u].sum;
return ;
}
int mid = l + r >> 1;
build (2 * u, l, mid);
build (2 * u + 1, mid + 1, r);
push_up (u);
}
void modify (int u, int x, int v)
{
if (t[u].l == t[u].r and t[u].l == x)
{
t[u].lm = t[u].rm = t[u].tmax = t[u].sum = v;
return ;
}
int mid = t[u].l + t[u].r >> 1;
if (x <= mid)
modify (2 * u, x, v);
else
modify (2 * u + 1, x, v);
push_up (u);
}
segment_tree query (int u, int l, int r)
{
if (t[u].l >= l and t[u].r <= r)
return t[u];
int mid = t[u].l + t[u].r >> 1;
if (r <= mid)
return query (2 * u,l,r);
else if (l > mid)
return query (2 * u + 1, l, r);
else
{
segment_tree tr, t1 = query (2 * u, l, r), t2 = query (2 * u + 1, l, r);
tr.lm = max (t1.lm, t1.sum + t2.lm);
tr.rm = max (t2.rm, t1.rm + t2.lm);
tr.tmax = max (max (t1.tmax, t2.tmax), t1.rm + t2.lm);
return tr;
}
}
int main ()
{
scanf ("%d %d", &n, &m);
build (1, 1, n);
for (int i = 1; i <= m; ++ i)
{
int op, a, b;
scanf ("%d %d %d", &op, &a, &b);
if (a > b)
swap (a, b);
if (op == 1)
printf ("%d\n", query (1, a, b));
else
modify (1, a, b);
}
return 0;
}
by 半只蒟蒻 @ 2023-10-29 11:14:20
你这个query返回的是 segment 类型,不能直接 printf,你可能需要输出结构体某个成员
by YGW6 @ 2023-10-29 11:15:47
@半只蒟蒻 嗯嗯,发现了,改了,但是只过了一个点
by 半只蒟蒻 @ 2023-10-29 11:26:02
@YGW6 tmax
的更新有问题,考虑把左儿子的rm 和右儿子的 lm 拼在一起时,要考虑一下正负性的问题
by 半只蒟蒻 @ 2023-10-29 11:27:25
@YGW6 就是说,如果两个都是负数的话,就取较大值,否则如果只有一个是正数的话,就取正数,否则可以拼在一起
by YGW6 @ 2023-10-29 11:38:58
@半只蒟蒻
谢谢大佬,我改了一下,AC了;
一个是push_up里变量名的问题,还有就是long long,以及输入里的if,应该写在else里面,和push_up里的各项的下标有点问题,没有找对子树
by 半只蒟蒻 @ 2023-10-29 11:39:32
@YGW6 感觉不需要long long
?(
by YGW6 @ 2023-10-29 11:44:08
@半只蒟蒻
嘶~真的不需要……我还因为这个改了半天……悲:(
有劳了,谢谢大佬啦