蒟蒻求助大佬,关于宏定义
  • 板块学术版
  • 楼主Michael_Liu
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/10/3 20:23
  • 上次更新2023/11/2 16:01:37
查看原帖
蒟蒻求助大佬,关于宏定义
750869
Michael_Liu楼主2023/10/3 20:23

今天写李超线段树板子的时候遇到了一个神奇的问题:

为了快点,我写了个宏定义:

#define max(a,b) (((a)>(b))?(a):(b))

然后在李超线段树的查询函数中用到了max:

double ask(int k,int l,int r,int x){
	if(l==r) return L[p[k].val].ask_val(x);
	int mid=(l+r)>>1;
	double res=L[p[k].val].ask_val(x);
	if(x<=mid) return max(res,ask(p[k].lc,l,mid,x));
	else return max(res,ask(p[k].rc,mid+1,r,x));
}

然后TLE了调了INF年

最后发现,把max里面两个东西交换位置就过了:

if(x<=mid) return max(ask(p[k].lc,l,mid,x),res);
else return max(ask(p[k].rc,mid+1,r,x),res);

有没有大佬知道是为什么啊,蒟蒻拜谢Orz

2023/10/3 20:23
加载中...