检查你的查询最大值函数的递归有没有调用错(调了两天)
错误:
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));
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不行。
这一切都是血的教训!