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实现(完整源码) ...
随机推荐
- PCB 规则引擎之脚本语言JavaScript应用评测
世界上没有好做的软件,觉得好做,只是你的系统简单而已,而不是哪个行业简单,特别像我们PCB制造企业务逻辑的很复杂的,仅仅靠决策树中的每个节点布置决策逻辑是不能满足要求的,所以我们在制作PCB规则引擎必 ...
- 9.28NOIP模拟题
9.28NOIP模拟题 题目 哈 哈哈 哈哈哈 英文题目与子目录名 ha haha hahaha 单个测试点时间限制 1秒 1秒 1秒 内存限制 256M 128M 64M 测试点数目 10 10 1 ...
- Netty编解码技术和UDP实现
背景 作为网络传输框架,免不了传输对象,对象在传输之前就要序列化,这个序列化的过程就是编码过程.接收到编码后的数据就需要解码,还原传输的数据. 编解码技术就是java序列化技术,序列化的目的有两个,一 ...
- 【洛谷3648/BZOJ3675】[APIO2014]序列分割(斜率优化DP)
题目: 洛谷3648 注:这道题洛谷3648有SPJ,要求输出方案.BZOJ3675数据组数较多但不要求输出方案. 分析: 这可能是我第三次重学斜率优化了--好菜啊 这道题首先一看就是个DP.稍微推一 ...
- 【转】DOS与linux的断行字符
转自:http://www.2cto.com/os/201109/104833.html 今天配置linux的dns服务器,在配置的时候,在linux下修改配置文件感觉很麻烦,于是想到把配置文件拿到w ...
- CF126B Password
思路: kmp略作修改. 实现: #include <iostream> #include <cstdio> using namespace std; ; int neXt[M ...
- PHP配置步骤
背景: 作为web前端人员,必不可少的会接触到一些服务器端的脚本语言,比如PHP.因为最近在进行相关知识的总结,同时也回顾一下PHP基础知识.这次总结先从PHP的开始说起,即PHP的配置步骤. 什么是 ...
- 解决Android弹出软键盘导致的问题
一.当Activity启动后EditText直接获取了焦点,此时软键盘会自动弹出,这种体验并不是很好,因此要做的Activity启动不自动弹出软键盘,只需要在Manifest中对应的Activity添 ...
- Android开发高手课 - 02 崩溃优化(下):应用崩溃了,你应该如何去分析?
崩溃现场 1. 崩溃信息 进程名.线程名 崩溃类型和堆栈信息 2. 系统信息 Logcat 机型.系统.厂商.CPU.ABI.Linux 版本等 设备状态:是否 root.是否模拟器.是否有 Xpos ...
- 超经典~超全的jQuery插件大全
海量的jQuery插件帖,很经典,不知道什么时候开始流传,很早以前就收藏过,为了工作方便还是发了一份放在日志里面. 其中有些已经无法访问,或许是文件移除,或许是被封锁.大家分享的东西,没什么特别的可说 ...