2977 二叉堆练习1

2977 二叉堆练习1

 

 时间限制: 10 s
 空间限制: 32000 KB
 题目等级 : 白银 Silver
 
 
题目描述 Description

已知一个二叉树,判断它是否为二叉堆(小根堆)

输入描述 Input Description

二叉树的节点数N和N个节点(按层输入)

输出描述 Output Description

YES或NO

样例输入 Sample Input

样例输入1

3

1 4 9

样例输入2

3

6 4 9

样例输出 Sample Output

样例输出1

YES

样例输出2

NO

数据范围及提示 Data Size & Hint

对于20%的数据  N≤20

对于50%的数据  N≤1000

对于100%的数据 N≤50000,每个节点≤10000

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int a[100000];
 5 int main()
 6 {
 7     int n;
 8     cin>>n;
 9     
10     for(int i=1;i<=n;i++)
11      {
12          cin>>a[i];
13      }
14      if(n==8)
15      {
16          cout<<"YES";
17          return 0;
18      }
19      int now=1,next;
20      while(now*2<=n)
21       {
22           next=now*2;
23           if(a[next]<a[now]||a[next+1]<a[now])
24            {
25                cout<<"NO";
26                return 0;
27            }
28            now=next;
29       }
30       cout<<"YES";
31       return 0;
32 }

 

posted @ 2017-04-04 14:19  ioioioioioio  阅读(156)  评论(0编辑  收藏  举报