_joker_r @ 2024-08-17 17:08:58
检查你的查询最大值函数的递归有没有调用错(调了两天)
错误:
int maxx(int p,int l,int r,int x,int y)
{
if(x<=l and r<=y)
{
return t[p].maxn;
}
push_down(p);
int m=l+r>>1,ma=-0x3f3f3f3f3f3f3f3f;
if(x<=m)ma=max(ma,maxx(p,l,m,x,y));//这两行不能用p,要递归左右子树
if(y>m)ma=max(ma,maxx(p,m+1,r,x,y));
return ma;
}
正确:
int maxx(int p,int l,int r,int x,int y)
{
if(x<=l and r<=y)
{
return t[p].maxn;
}
push_down(p);
int m=l+r>>1,ma=-0x3f3f3f3f3f3f3f3f;
if(x<=m)ma=max(ma,maxx(lr(p),l,m,x,y));
if(y>m)ma=max(ma,maxx(rr(p),m+1,r,x,y));
return ma;
}
看看你用来表示不可能的值,一定要开大点,0x3f3f3f3f不行。
by Sakura_Lu_Hui @ 2024-08-17 17:15:41
@_joker_r 进食后人,警钟肘烂