求助,关于O2优化
  • 板块学术版
  • 楼主TianLuen
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/9/1 19:37
  • 上次更新2023/10/27 12:52:20
查看原帖
求助,关于O2优化
239988
TianLuen楼主2022/9/1 19:37
int _rank(int val,int finder)
	{
		if(!finder)
			return -1;
		if(value[finder]==val)
			return size[child[finder][0]]+1;
		if(value[finder]<val)
			return size[child[finder][0]]+same_value[finder]+_rank(val,child[finder][1]);
		if(value[finder]>val)
			return _rank(val,child[finder][0]);
		return 0;
	}

上述代码段。在不开O2优化的时候可以正常运行,开O2优化时TLE。

下面是几组O2下的调试。

1

不作修改。

结果:

2

return 0; 前加两行 cout<<"!!!";exit(0);

结果:输出 !!!,正常结束程序。也就是说,有两个数,既不大于、小于,又不等于。

3

在上一组的基础上,输出 value[finder]valvalue[finder]==val

结果:输出两个相等的数和1,程序正常结束。也就是说,是相等,但没有进 if

4

原始程序,在判断相等的那个 if 里面,加入一行 cout<<"!!!";

结果:运行时错误。也就是说,加入一行调试语句,使得莫名TLE的AC代码变成了RE。

2022/9/1 19:37
加载中...