题目描述 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. 【干货】Kafka 事务特性分析

    特性背景 消息事务是指一系列的生产.消费操作可以要么都完成,要么都失败,类似数据库的事务.这个特性在0.10.2的版本是不支持的,从0.11版本开始才支持.华为云DMS率先提供Kafka 1.1.0的 ...

  2. SQL SERVER:一条SQL语句插入多条记录等

    在学习排名第二的mySql过程中,发现它的插入语句可以这样写: use test; create table fruits( fid char(10) not null ,s_id int null ...

  3. JSP-Runoob:JSP 生命周期

    ylbtech-JSP-Runoob:JSP 生命周期 1.返回顶部 1. JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期. JSP生命周期就是从创建到销毁的整个过程,类似于 ...

  4. 收集主机OS相关数据

    #!/usr/bin/ksh touch hostinfo$(date +%Y%m%d).csv filename=hostinfo$(date +%Y%m%d).csv >${filename ...

  5. 60.extjs-布局 (在column布局中使用fieldset 和 在fieldset中使用column布局)

    转自:https://blog.csdn.net/snn1410/article/details/8817821/ 在标准的html中,需要把输入项都放到fieldset中,一次来显示分组结构.虽然E ...

  6. android apk 防止反编译技术第三篇-加密

    上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止a ...

  7. 洛谷P1250种树(贪心)

    题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1..N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定了三个号码B,E, ...

  8. HyperLedger Fabric部署与链码解读

    1.Fabric简介 Fabric是超级账本中的一个项目,用以推进区块链技术.和其他区块链类似,它也有一个账本,使用智能合约,且是一个参与者可以分别管理自身交易的系统.它是一个联盟链.Fabric与其 ...

  9. Codeforces 792D

    题意:给定一棵拥有n个节点的满二叉树(即n==2^x-1),q个查询,每次给出一个节点的编号,再给出一个由L,R,U组成的字符串序列,依次表示向左子节点.右子节点.父节点移动,如果移动不合法,则忽略. ...

  10. Nginx一个实现负载均衡的强大web server

    <转>nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持): 〉另外一个 ...