2020-11-14牛客小白月赛29-D
[by_041]
- 看题,分析,大剪刀就是用来搬运大数的,多大呢?在
(0m+1)/2
层内最大的 - 那么答案就很明显了,
(m+1)/2
内的深度返回大值,其余返回小值 - 附上代码
#include<iostream>
using namespace std;
void swp(int&a,int&b)
{a^=b;b^=a;a^=b;return;}
int maxx(int a,int b)
{return a>b?a:b;}
int minn(int a,int b)
{return a<b?a:b;}
int input()
{char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
int a=ch-'0';
while((ch=getchar())>='0'&&ch<='9')
a=(a<<3)+(a<<1)+ch-'0';
return a;
}
void output(int a)
{
if(a>9)
output(a/10);
putchar(a%10+'0');
return;
}
struct node_
{
int l,r,val;
}d[1000001];
int n,m,anss;
int goo(int f=1,int layer=1)
{
if(!d[f].l)return d[f].val;
if(layer<=m)
return maxx(goo(d[f].l,layer+1),goo(d[f].r,layer+1));
return minn(goo(d[f].l,layer+1),goo(d[f].r,layer+1));
}
int main()
{
n=input();
for(int i=1;i<=n;i++)
d[i].l=input(),d[i].r=input(),m+=(bool)d[i].l;
m=(m+1)/2;
for(int i=1;i<=n;i++)
d[i].val=input();
anss=goo();
output(anss);
return 0;
}