PAT12-012【建最小堆】
卧槽。。没看清 值 还有负的。。
PS: 注意他说是一个一个插入的,也就是插在完全二叉树的最末位置,然后向上更新。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL; int a[1010]; void BuildMinHeap(int n)
{
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
int j=i;
while(a[j]<a[j/2]&&j>1)
{
swap(a[j],a[j/2]);
j/=2;
}
}
} int main()
{
int x,y,len,k,n;
char s[110];
scanf("%d%d",&n,&k);
BuildMinHeap(n); while(k--)
{
int flag,ff=0;
scanf("%d",&x);
gets(s);
len=strlen(s);
y=0;
for(int i=0;i<len;i++)
{
if(s[i]=='-') ff=1;
if(i+1<len&&s[i]=='r'&&s[i+1]=='o') flag=1;
if(i+1<len&&s[i]=='s'&&s[i+1]=='i') flag=2;
if(i+1<len&&s[i]=='p'&&s[i+1]=='a') flag=3;
if(i+1<len&&s[i]=='c'&&s[i+1]=='h') flag=4;
if(s[i]>='0'&&s[i]<='9') y=y*10+s[i]-'0';
}
if(ff) y=-y;
if(flag==1)
{
if(x==a[1]) puts("T");
else puts("F");
}
else if(flag==2)
{
bool f=false;
for(int i=1;(2*i+1)<=n;i++)
if((a[2*i]==x&&a[2*i+1]==y)||(a[2*i]==y&&a[2*i+1]==x))
{puts("T");f=true;break;}
if(!f) puts("F");
}
else if(flag==3)
{
bool f=false;
for(int i=1;i<=n;i++)
{
if(a[i]==x)
if(2*i<=n&&a[2*i]==y){puts("T");f=true;break;}
if(a[i]==x)
if((2*i+1)<=n&&a[2*i+1]==y){puts("T");f=true;break;}
}
if(!f) puts("F");
}
else if(flag==4)
{
bool f=false;
for(int i=1;i<=n;i++)
{
if(a[i]==y)
if(2*i<=n&&a[2*i]==x){puts("T");f=true;break;}
if(a[i]==y)
if((2*i+1)<=n&&a[2*i+1]==x){puts("T");f=true;break;}
}
if(!f) puts("F");
}
}
return 0;
}
PAT12-012【建最小堆】的更多相关文章
- Python3实现最小堆建堆算法
今天看Python CookBook中关于“求list中最大(最小)的N个元素”的内容,介绍了直接使用python的heapq模块的nlargest和nsmallest函数的解决方式,记得学习数据结构 ...
- 《徐徐道来话Java》:PriorityQueue和最小堆
在讲解PriorityQueue之前,需要先熟悉一个有序数据结构:最小堆. 最小堆是一种经过排序的完全二叉树,其中任一非终端节点数值均不大于其左孩子和右孩子节点的值. 可以得出结论,如果一棵二叉树满足 ...
- 数据结构之最小堆的实现C++版
完全二叉树之所以用数组的方式存在,在于他的一个特性 若子节点为i,则父节点为(i-1)/2,注意c++特性,该结果肯定是个整数. 若父节点为j,则子节点必为2*j+1;则在数组里面可以非常方便的通过下 ...
- c++/java/python priority_que实现最大堆和最小堆
#include<iostream>#include<vector>#include<math.h>#include<string>#include&l ...
- 最大堆 最小堆 解决TOPK问题
堆:实质是一颗完全二叉树,最大堆的特点:父节点值均大于子节点:最小堆的父节点值均小于子节点: 一般使用连续内存存储堆内的值,因而可以根据当前节点的索引值推断子节点的索引值: 节点i的父节点为(i-1) ...
- Google 面试题:Java实现用最大堆和最小堆查找中位数 Find median with min heap and max heap in Java
Google面试题 股市上一个股票的价格从开市开始是不停的变化的,需要开发一个系统,给定一个股票,它能实时显示从开市到当前时间的这个股票的价格的中位数(中值). SOLUTION 1: 1.维持两个h ...
- 【数据结构】通用的最小堆(最大堆)D-ary Heap
听说有一种最小(大)堆,不限于是完全二叉树,而是完全D叉树,名为D-ary Heap(http://en.wikipedia.org/wiki/D-ary_heap).D可以是1,2,3,4,100, ...
- 使用最小堆来完成k路归并 6.5-8
感谢:http://blog.csdn.net/mishifangxiangdefeng/article/details/7668486 声明:供自己学习之便而收集整理 题目:请给出一个时间为O(nl ...
- My集合框架第五弹 最小堆
二叉堆(以最小堆为例),其具有结构性质和堆序性质结构性质: 堆是一棵完全的二叉树,一颗高为h的完全二叉树有2^h到2^h-1个节点,高度为log N 而且该结构可以很容易的使用数 ...
随机推荐
- 单机版 JedisUtil({基本操作封装工具类})【二】
<!--集成的RedisJAR--> <!--引入jedis需的jar包--> <dependency> <groupId>redis.clients& ...
- javascript时间戳转换成指定格式的日期
//时间戳转换成指定格式的日期DateTool.IntDatetimeTo = function(time, format){ var testDate = new Date(time); ...
- Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件
先说和虚拟化技术的区别: 难道虚拟技术就做不到吗? 不不不,虚拟技术也可以做到,但是会有一定程度的性能损失,灵活度也会下降.容器技术不是模仿硬件层次,而是 在Linux内核里使用cgroup和name ...
- codeforces 553B B. Kyoya and Permutation(找规律)
题目链接: B. Kyoya and Permutation time limit per test 2 seconds memory limit per test 256 megabytes inp ...
- c/c++写的比较好的读写配置文件的函数或者类
共用版 .h文件 //---------------------------------------------------------------------------- // 程序名称: ...
- 【LeetCode】012. Integer to Roman
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...
- 一步一步学RenderMonkey
http://blog.csdn.net/tianhai110/article/details/5668832 转载请注明出处:http://blog.csdn.net/tianhai110/ 网上一 ...
- Sublime Text2中Evernote 插件的使用
Sublime Text2是个强大的编辑器, 有好多插件供我们使用, 其中有个插件SublimeEvernote, 可以把代码发送到Evernote里. 但是没找见使用说明, 今天看了下Sublime ...
- HDOJ1548(DFS超内存,BFS过了)
DFS代码 #include<iostream> #include<cstdio> using namespace std; #define Min(a,b) (a<b) ...
- SQL 常用语句收集
1.UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 2.SELECT * FROM TableA INNER JOIN TableB ON TableA.name = T ...