特大喜讯,我找到了让线段树常数小一个n的方法

麻麻再也不用担心我被卡常

//大常数写法
int Find(int rt,int l,int r,int s,int t){
	if(!tr[rt].maxi || !rt || t<s)return 0;
	if(l==r)return tr[rt].maxi;
	int mid=(l+r)>>1,res=0;
	if(s<=mid)res=Find(LCH,l,mid,s,t);
	if(t>mid)res=max(res,Find(RCH,mid+1,r,s,t));
	return res;
}
//这样写常数小了一个n
int Find(int rt,int l,int r,int s,int t){
	if(!tr[rt].maxi || !rt || t<s)return 0;
	if(s<=l && t>=r)return tr[rt].maxi;
	int mid=(l+r)>>1,res=0;
	if(s<=mid)res=Find(LCH,l,mid,s,t);
	if(t>mid)res=max(res,Find(RCH,mid+1,r,s,t));
	return res;
}

实践效果如下

image

posted @ 2022-11-17 19:57  Delov  阅读(105)  评论(8编辑  收藏  举报