疑问
查看原帖
疑问
817681
HZHDCM楼主2024/7/10 07:06

从其他题来吃经验的,代码中查询的部分本来是:

inline int query(int tl,int tr,int x,int l,int r){
	int p1=t[t[tr].l].sum-t[t[tl].l].sum,p2=t[t[tr].r].sum-t[t[tl].r].sum;
	if(l==r)return l;
	int mid=(l+r)>>1;
	if(p1>x)return query(t[tl].l,t[tr].l,x,l,mid);
	if(p2>x)return query(t[tl].r,t[tr].r,x,mid+1,r);
	return 0;
}

但是在这道题莫名其妙wa了,而改成如下:

inline int query(int tl,int tr,int x,int l,int r){
	int p1=t[t[tr].l].sum-t[t[tl].l].sum,p2=t[t[tr].r].sum-t[t[tl].r].sum;
	if(l==r)return l;
	int mid=(l+r)>>1;
	if(p1>x){
		int ans=query(t[tl].l,t[tr].l,x,l,mid);
		if(ans)return ans;
	}
	if(p2>x){
		int ans=query(t[tl].r,t[tr].r,x,mid+1,r);;
		if(ans)return ans;
	}
	return 0;
}

就能AC,蒟蒻我认为这两种应该没什么差异,因为如果在一边区间找到大于一半的另一边应该小于一般,就算这边没查到,返回的也应该还是零,而不是其他数字。求大佬解答

2024/7/10 07:06
加载中...