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实现(完整源码) ...
随机推荐
- window+nginx+php-cgi的php-cgi线程/子进程问题
见bbs http://bbs.csdn.net/topics/390803643/close 正常的配置情况下,window的php-cgi是不会出现多线程/子进程的,例如以下配置 fastcgi_ ...
- Powershell远程在Azure A7虚拟机执行Java JVM失败
近期.使用Powershell脚本在A7 (8核,56G内存)配置的 Azure VM(Virtual Machine.虚拟机)上远程运行Java JVM时 (java.exe -version).总 ...
- BNU 13024 . Fi Binary Number 数位dp/fibonacci数列
B. Fi Binary Number A Fi-binary number is a number that contains only 0 and 1. It does not conta ...
- kafka01
消息队列松耦合 消息队列
- Solution:Cannot pull with rebase: You have unstaged changes in Github
You can do this to work around using following steps 1. stash your changes with: git stash 2. pull f ...
- PCB genesis连孔加除毛刺孔(槽孔与槽孔)实现方法(三)
一.为什么 连孔加除毛刺孔 原因是 PCB板材中含有玻璃纤维, 毛刺产生位置在于2个孔相交位置,由于此处钻刀受力不均导致纤维切削不断形成毛刺 ,为了解决这个问题:在钻完2个连孔后,在相交处再钻一个孔, ...
- Java 中数组的遍历方式
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java 语言中提供的数组是用来存储固定大小的同类型元素. 今天我们就来说一下在java中遍历数组都有哪几 ...
- Saiku导出excel指标列无线条以及0与空值显示问题(三十二)
Saiku导出excel指标列无线条以及0与空值显示问题 描述: 数据库中字段值为0 ,与数据库中字段值为 null 时 ,saiku会将为0 以及为 null 的数据都不展示出来,但是我们其实希望数 ...
- 简单 android popupwindow 实现
1. popupWindow 设置大小: popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.FILL_PARENT, ViewGr ...
- c# regex Match Matches MatchCollection 用法
string text = "1A 2B 3C 4D 5E 6F 7G 8H 9I 10J 11Q 12J 13K 14L 15M 16N ffee80 #800080"; Reg ...