【深基16.例1】淘汰赛 - 洛谷
思路这道题比较简单,用到的是二叉树。
有人可能会问了:这道题看上去和二叉树没啥关系啊?一个简单的遍历(或者两个)不就可以啦?
啊对对对,你说的都对,这道题确实在代码实现过程中不需要建树,用到的是二叉树的思想!这就叫:心中有树,码字不慌!
……
来康康二叉树思想的部分,就是分别判断索引是在左边还是右边,再通过比较,求出两边的最大值,在输出的时候输出两个最大值的最小值就O了。
//i是索引,tmp是元素的值,k是元素总数
if(i<=k/2){
if(tmp>maxl) {
maxl=tmp;
idl=i;
}
}
else{
if(tmp>maxr){
maxr=tmp;
idr=i;
}
}
完整代码实现
#includeusing namespace std; int n,maxl=0,maxr=0,tmp,idl,idr; int main(){ cin>>n; int k=pow(2,n); for(int i=1;i<=k;i++){ cin>>tmp; if(i<=k/2){ if(tmp>maxl) { maxl=tmp; idl=i; } } else{ if(tmp>maxr){ maxr=tmp; idr=i; } } } if(maxl>maxr) cout< 88~



