如果你20pts 或 50pts
查看原帖
如果你20pts 或 50pts
1271324
TH_HaZel楼主2024/8/17 17:08
  • 如果你20pts AC on #1,#3

检查你的查询最大值函数的递归有没有调用错(调了两天)

错误:

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;
}
  • 如果你50pts WA后五个测试点

看看你用来表示不可能的值,一定要开大点,0x3f3f3f3f不行。

这一切都是血的教训!

2024/8/17 17:08
加载中...