Emplace_back @ 2022-07-18 12:00:21
只对了#1
调了一上午也不明白哪里出问题了qwq
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e5+10,Inf=9223372036854775807;
char cch;
int res,zf;
inline int rd()
{
while((cch=getchar())<45);
if(cch^45)res=cch^48,zf=1;
else res=0,zf=-1;
while((cch=getchar())>=48)res=(res*10)+(cch^48);
return res*zf;
}
int n=rd(),T=rd();
struct Tree
{
int l,r;
int mx,mxl,mxr;
int sum;
}t[N<<2];
inline void pushup(int u)
{
t[u].sum=t[u<<1].sum+t[u<<1|1].sum;
t[u].mx=max(max(t[u<<1].mx,t[u<<1|1].mx),t[u<<1].mxr+t[u<<1|1].mxl);
t[u].mxl=max(t[u<<1].mxl,t[u<<1].sum+t[u<<1|1].mxl);
t[u].mxr=max(t[u<<1|1].mxr,t[u<<1|1].sum+t[u<<1].mxr);
}
inline void build(int u,int l,int r)
{
t[u].l=l,t[u].r=r;
if(l==r)
{
t[u].sum=t[u].mx=t[u].mxl=t[u].mxr=rd();
return;
}
int mid=(t[u].l+t[u].r)>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
pushup(u);
}
inline void update(int u,int p,int k)
{
if(t[u].l==t[u].r)
{
t[u].sum=t[u].mx=t[u].mxl=t[u].mxr=k;
return;
}
int mid=(t[u].l+t[u].r)>>1;
if(mid>=p) update(u<<1,p,k);
else update(u<<1|1,p,k);
pushup(u);
}
inline int query(int u,int l,int r)
{
if(l<=t[u].l&&r>=t[u].r) return t[u].mx;
int mid=(t[u].l+t[u].r)>>1,mx=-Inf;
if(l<=mid) mx=query(u<<1,l,r);
if(r>mid) mx=max(mx,query(u<<1|1,l,r));
return mx;
}
int opt;
int kl,kr;
signed main()
{
build(1,1,n);
while(T--)
{
opt=rd();
kl=rd(),kr=rd();
switch(opt)
{
case 1:if(kl>kr)swap(kl,kr);cout<<query(1,kl,kr)<<'\n';break;
case 2:update(1,kl,kr);break;
}
}
return 0;
}
by Emplace_back @ 2022-07-18 12:03:04
Hack:
50 5
773
760
-578
-302
-664
272
367
352
891
-569
429
-208
-325
38
148
456
-960
-390
470
271
763
-458
-52
647
-205
-514
399
-611
882
665
257
-718
233
-756
237
-301
650
148
-894
-212
-820
-341
-240
-620
320
932
-498
-252
323
-428
2 5 818
1 35 49
2 15 -87
1 31 48
1 44 37 <=
正确答案:798
我的答案:650
差了个38号位上的148
by sprads @ 2022-07-18 12:32:34
@Penggeng query
写错啦,你 pushup
的合并两块在询问时也要用啊,否则答案肯定偏小啊
by sprads @ 2022-07-18 12:33:24
@sprads query
也要合并得到的两块的信息
by sprads @ 2022-07-18 12:34:27
@sprads 合并方式和 pushup
类似,query
返回结构体 Tree
类型
by Emplace_back @ 2022-07-18 12:54:08
感谢!