2977,3110 二叉堆练习1,3——codevs
二叉树的节点数N和N个节点(按层输入)
YES或NO
样例输入1
3
1 4 9
样例输入2
3
6 4 9
样例输出1
YES
样例输出2
NO
对于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";
}
给定N(N≤500,000)和N个整数(较有序),将其排序后输出。
N和N个整数
N个整数(升序)
5
12 11 10 8 9
8 9 10 11 12
对于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的更多相关文章
- codevs 3110 二叉堆练习3
3110 二叉堆练习3 http://codevs.cn/problem/3110/ 题目描述 Description 给定N(N≤500,000)和N个整数(较有序),将其排序后输出. 输入描述 I ...
- AC日记——二叉堆练习3 codevs 3110
3110 二叉堆练习3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 给定N(N≤500,000)和N个整 ...
- 2977 二叉堆练习1 codevs
题目描述 Description 已知一个二叉树,判断它是否为二叉堆(小根堆) 输入描述 Input Description 二叉树的节点数N和N个节点(按层输入) 输出描述 Output Descr ...
- codevs 2977 二叉堆练习1x
时间限制: 10 s 空间限制: 32000 KB 题目等级 : 白银 Silver 题目描述 Description 已知一个二叉树,判断它是否为二叉堆(小根堆) 输入描述 Input ...
- 数据结构图文解析之:二叉堆详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- POJ 2010 - Moo University - Financial Aid 初探数据结构 二叉堆
考虑到数据结构短板严重,从计算几何换换口味= = 二叉堆 简介 堆总保持每个节点小于(大于)父亲节点.这样的堆被称作大根堆(小根堆). 顾名思义,大根堆的数根是堆内的最大元素. 堆的意义在于能快速O( ...
- 二叉堆(一)之 图文解析 和 C语言的实现
概要 本章介绍二叉堆,二叉堆就是通常我们所说的数据结构中"堆"中的一种.和以往一样,本文会先对二叉堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本 ...
- 二叉堆(二)之 C++的实现
概要 上一章介绍了堆和二叉堆的基本概念,并通过C语言实现了二叉堆.本章是二叉堆的C++实现. 目录1. 二叉堆的介绍2. 二叉堆的图文解析3. 二叉堆的C++实现(完整源码)4. 二叉堆的C++测试程 ...
- 二叉堆(三)之 Java的实现
概要 前面分别通过C和C++实现了二叉堆,本章给出二叉堆的Java版本.还是那句话,它们的原理一样,择其一了解即可. 目录1. 二叉堆的介绍2. 二叉堆的图文解析3. 二叉堆的Java实现(完整源码) ...
随机推荐
- Oracle Study之--Oracle 11gR2通过RMAN克隆数据库
Oracle Study之--Oracle 11gR2通过RMAN克隆数据库 Purpose of Database Duplication A duplicate database is usefu ...
- scikit-learn: isotonic regression(保序回归,非常有意思,仅做知识点了解,但差点儿没用到过)
http://scikit-learn.org/stable/auto_examples/plot_isotonic_regression.html#example-plot-isotonic-reg ...
- UNIX网络编程——网络I/O模型
在学习UNIX网络编程的时候.一開始分不清 同步 和 异步,所以还是总结一下,理清下他们的差别比較好. IO分类 IO依据对IO的调度方式可分为堵塞IO.非堵塞IO.IO复用.信号驱动IO.异步IO. ...
- linux 磁盘性能监控
linux下对于查看进程的命令非常多也非常强大.经常使用的如:ps top 可是在磁盘性能监控方面就没有那么统一了. 以下列举一些磁盘监控命令.此处仅仅是起到抛砖引玉作用,具体使用參数请參考man手 ...
- 防遗忘笔记,Fedora交叉编译window下的virt-iewer的汉化
1. 汉化代码里的资源 virtviewer使用的是gettex的方案是标准的linux里国际化的方案.按道理仅仅须要改动virtualviewer/po/zh_CN.po的文件. 编译. 然后确认在 ...
- expect安装测试-批量用户管理
安装: yum list | grep expect yum install expect 批量创建用户: ansible mysqldb -m user -a 'name=ansible state ...
- CA certificate
1 什么是CA certificate CA证书本质上是一把公钥. 2 为什么需要CA证书 是为了避免黑客冒充服务器,服务器通过CA证书证明自己是真的服务器,而不是黑客. 就是说,一旦客户端有了一个服 ...
- 在Java中实现UDP协议编程(DatagramSocket/DatagramPacket)
1.什么是UDP协议? UDP( User Datagram Protocol )协议是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层,处于IP协议的上一层. ...
- ADTS结构
ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式.转载请注明来自:http://www.binkery.com/ ADTS内容及结构一般情况下 ...
- PCB C# MongoDB 查询(SQL,NOSQL,C#对比)
一.准备阶段 1.查询数据清单准备 2.这里先将SQL语句执行顺序列出来,方便后面语句对比更好理解 ()SELECT ()DISTINCT ()<Top Num> <select l ...