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],val,value[finder]==val。
结果:输出两个相等的数和1,程序正常结束。也就是说,是相等,但没有进 if。
4
原始程序,在判断相等的那个 if 里面,加入一行 cout<<"!!!";。
结果:运行时错误。也就是说,加入一行调试语句,使得莫名TLE的AC代码变成了RE。