codevs 2879 堆的判断
题目描述 Description
堆是一种常用的数据结构。二叉堆是一个特殊的二叉树,他的父亲节点比两个儿子节点要大,且他的左右子树也是二叉堆。现在输入一颗树(用二叉树的数组表示,即a[i]的左儿子与右儿子分别为a[2i],a[2i+1]),要求判断他是否是一个堆。
输入描述 Input Description
一个整数N,表示结点数。
第二行N个整数,表示每个结点代表的数字
输出描述 Output Description
如果是,输出‘Yes’
否则输出‘No’
样例输入 Sample Input
5
1 2 3 4 5
样例输出 Sample Output
No
数据范围及提示 Data Size & Hint
1<N<100
数字在2^31以内
很洪水的一道题,发出来就是为了证明我还活着。。
恶补一下基础知识 。堆(也叫优先队列),是一棵完全二叉树,它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排 序,优先队列等。
#include <iostream> #include <cstring> #include <cstdio> using namespace std; bool flag; int n,i,j,a[103111]; int main() { cin>>n; for(i=1;i<=n;++i) cin>>a[i]; for(i=1;i<=n;++i) { if(a[i]>a[i<<1]&&a[i]>a[i<<1+1]) continue; else { flag=true; break; } } if(flag) cout<<"No"; else cout<<"Yes"; }
我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。