我不理解
查看原帖
我不理解
92991
cindy2007楼主2022/7/19 07:51

int query(int rt,int l,int r,int x,int y)
{
	pushdown(rt);
	if (x<=l && y>=r)
	{
		return mn[rt];
	}
	int mid=(l+r)>>1;
	int ans=-1;
	if (x<=mid)	ans=query(rt<<1,l,mid,x,y);
	if (y>mid)	{
		if (ans==-1)
			ans=query(rt<<1|1,mid+1,r,x,y);	
		else
			ans=min(ans,query(rt<<1|1,mid+1,r,x,y));	
	}
	return ans;
}

改成

int query(int rt,int l,int r,int x,int y)
{
	if (x>r || y<l)	return 0x7fffffff;//这里改了
	pushdown(rt);
	if (x<=l && y>=r)
	{
		return mn[rt];
	}
	int mid=(l+r)>>1;
	int ans=min(query(rt<<1,l,mid,x,y),query(rt<<1|1,mid+1,r,x,y));//这里改了
	return ans;
}

就可以AC

而且前一份看评测结果好像返回的ans是-1

主函数调用代码

if (x==nrt)
				printf("%lld\n",mn[1]);
			else
			{
				int y=getfa(x,nrt);
				if (y==-1)
					printf("%lld\n",query(1,1,n,id[x],id[x]+size[x]-1));
				else
					printf("%lld\n",min(query(1,1,n,1,id[y]-1),query(1,1,n,id[y]+size[y],n)));
			}

求助大佬们这是为什么

2022/7/19 07:51
加载中...