题目描述 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

根据小根堆的性质:父节点的左右子节点的值小于父节点的值

奉上AC代码:

#include<bits/stdc++.h>

using namespace std;
int n,a[1000000];
bool tp;
int main()
{
	cin>>n;
	memset(a,0x7f,sizeof(a));
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=n;i++){
		int l=i*2,r=i*2+1;
		if(a[l]<a[i]){tp=1;break;}
		else if(a[r]<a[i]){tp=1;break;}
	}if(tp==1) cout<<"NO";
	else cout<<"YES";
}

二叉堆练习3

题目描述 Description

给定N(N≤500,000)和N个整数(较有序),将其排序后输出。

输入描述 Input Description

N和N个整数

输出描述 Output Description

N个整数(升序)

样例输入 Sample Input

5

12 11 10 8 9

样例输出 Sample Output

8 9 10 11 12

数据范围及提示 Data Size & Hint

对于33%的数据 N≤10000

对于另外33%的数据 N≤100,000  0≤每个数≤1000

对于100%的数据 N≤500,000  0≤每个数≤2*10^9

堆排序模板题:

奉上AC代码:

1.堆排序1

#include<bits/stdc++.h>

using namespace std;
];
void heapify(int num[],int i,int size){
    *i;
    *i+;
    int maxn=i;
    if(left_child<size&&num[left_child]>num[maxn])
        maxn=left_child;
    if(right_child<size&&num[right_child]>num[maxn])
        maxn=right_child;
    if(maxn!=i){
        swap(num[i],num[maxn]);
        heapify(num,maxn,size);
    }
}
int buildheap(int num[],int n){
    int heap_size=n;
    ;i;i--)
        heapify(num,i,heap_size);
    return heap_size;
}
void heapsort(int num[],int n){
    int heap_size=buildheap(num,n);
    ){
        swap(num[],num[--heap_size]);
        heapify(num,,heap_size);
    }
}
int main()
{
    cin>>q;
    ;i<=q;i++) cin>>heap[i];
    heapsort(heap,q+);
    ;i<=q;i++) cout<<heap[i]<<" ";

    ;
}

2.堆排序2

根据插入以及弄出两种操作

#include<iostream>

using namespace std;
],heap_size;
void put(int d)
{
    int now, next;
    heap[++heap_size] = d;
    now = heap_size;
    )
    {
        next = now >> ;
        if(heap[now] >= heap[next]) break;
        swap(heap[now], heap[next]);
        now = next;
    }
}
int get()
{
    , next, res= heap[];
    heap[] = heap[heap_size--];
     <= heap_size)
    {
        next = now * ;
        ] < heap[next]) next++;
        if (heap[now] <= heap[next]) break;
        swap(heap[now], heap[next]);
        now = next;
    }
    return res;
}

int main()
{
    int n,x;
    cin>>n;
    ;i<=n;i++){
        cin>>x;
        put(x);
    };i<=n;i++){
        cout<<get()<<" ";
    }
    ;
}

3.当然,也可以使用STL水过去

#include<bits/stdc++.h>

using namespace std;
int n;
priority_queue<int ,vector<int>,greater<int> >heap;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		heap.push(x);
	}for(int i=1;i<=n;i++){
		cout<<heap.top()<<" ";
		heap.pop();
	}
	return 0;
}

  

2977,3110 二叉堆练习1,3——codevs的更多相关文章

  1. codevs 3110 二叉堆练习3

    3110 二叉堆练习3 http://codevs.cn/problem/3110/ 题目描述 Description 给定N(N≤500,000)和N个整数(较有序),将其排序后输出. 输入描述 I ...

  2. AC日记——二叉堆练习3 codevs 3110

    3110 二叉堆练习3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 给定N(N≤500,000)和N个整 ...

  3. 2977 二叉堆练习1 codevs

    题目描述 Description 已知一个二叉树,判断它是否为二叉堆(小根堆) 输入描述 Input Description 二叉树的节点数N和N个节点(按层输入) 输出描述 Output Descr ...

  4. codevs 2977 二叉堆练习1x

    时间限制: 10 s 空间限制: 32000 KB 题目等级 : 白银 Silver       题目描述 Description 已知一个二叉树,判断它是否为二叉堆(小根堆) 输入描述 Input ...

  5. 数据结构图文解析之:二叉堆详解及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  6. POJ 2010 - Moo University - Financial Aid 初探数据结构 二叉堆

    考虑到数据结构短板严重,从计算几何换换口味= = 二叉堆 简介 堆总保持每个节点小于(大于)父亲节点.这样的堆被称作大根堆(小根堆). 顾名思义,大根堆的数根是堆内的最大元素. 堆的意义在于能快速O( ...

  7. 二叉堆(一)之 图文解析 和 C语言的实现

    概要 本章介绍二叉堆,二叉堆就是通常我们所说的数据结构中"堆"中的一种.和以往一样,本文会先对二叉堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本 ...

  8. 二叉堆(二)之 C++的实现

    概要 上一章介绍了堆和二叉堆的基本概念,并通过C语言实现了二叉堆.本章是二叉堆的C++实现. 目录1. 二叉堆的介绍2. 二叉堆的图文解析3. 二叉堆的C++实现(完整源码)4. 二叉堆的C++测试程 ...

  9. 二叉堆(三)之 Java的实现

    概要 前面分别通过C和C++实现了二叉堆,本章给出二叉堆的Java版本.还是那句话,它们的原理一样,择其一了解即可. 目录1. 二叉堆的介绍2. 二叉堆的图文解析3. 二叉堆的Java实现(完整源码) ...

随机推荐

  1. Codeforces Round #329 (Div. 2)B. Anton and Lines 贪心

    B. Anton and Lines   The teacher gave Anton a large geometry homework, but he didn't do it (as usual ...

  2. css list menu

    选择让page和folder都显示出来

  3. Hybrid 开发

    主讲人:吴彬 要学习某个东西之前,我们首先要了解这个东西是什么?然后我们要了解这东西有什么用,有什么好处和弊端?最后我们要知道这东西怎么用? 简单点就是 ——是什么?有什么用?怎么用? 那么进入正题 ...

  4. go语言笔记——还是大爱的我的python,开发效果高,tornado的性能也很不错

    Go 自带的工具集主要使用脚本和 Go 语言自身编写的,目前版本的 Go 实现了以下三个工具: go install 是安装 Go 包的工具,类似 Ruby 中的 rubygems.主要用于安装非标准 ...

  5. 如何通过DirectInput技术针对莱仕达雷驰V3II游戏方向盘编程

    三自由度的动感座椅可以让玩游戏人员在玩的过程中随座椅一起晃动,通过应用程序对方向盘动作的抓取来实现体感,动作类型主要分为加速(后仰,对应踩油门).减速(前倾,对应踩刹车 ).左转(向左打方向盘).右转 ...

  6. hibernate基础学习---hierbnate2级缓存

    1:开启二级缓存sessionFactory需要安装jar包 2:在实体类配置文件添加(配置二级缓存).我的配置文件是Account.hbm.xml <?xml version="1. ...

  7. 洛谷P1613 跑路(最短路+倍增)

    P1613 跑路 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的 ...

  8. $P5018 对称二叉树$

    problem 一直忘记给这个题写题解了. 这题挺水的吧. 挺后悔当时没写出来. #ifdef Dubug #endif #include <bits/stdc++.h> using na ...

  9. MFC学习篇(一):用OpenCV显示视频

    首先是一些基础的步骤,如建立MFC应用,添加按钮等,博主主要参考了下面这篇文章,其中的前32步都是用OpenCV显示图片和视频所必须的,即通用的.由于LZ原来有配置OpenCV的基础,所以配制还是比较 ...

  10. 自定义View(9)使用Renderscript 渲染特效。

    1.渲染脚本官网 https://developer.android.com/guide/topics/renderscript/compute 2.高斯模糊 ScriptIntrinsicBlur ...