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 而且该结构可以很容易的使用数 ...
随机推荐
- cssParser
//cssParser.h #include<iostream> using namespace std;struct MyAttribute{ MyAttribute* next; s ...
- linux命令学习笔记(9):touch 命令
linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. .命令格式: touch [选项]... 文件... .命令参数: -a 或--t ...
- Struts2 - 表单的重复提交问题
用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...
- 转载 解决Android与服务器交互大容量数据问题
对于目前的状况来说,移动终端的网络状况没有PC网络状况那么理想.在一个Android应用中,如果需要接收来自服务器的大容量数据,那么就不得不考虑客户的流量问题.本文根据笔者的一个项目实战经验出发,解决 ...
- ACM学习历程—HDU 5023 A Corrupt Mayor's Performance Art(广州赛区网赛)(线段树)
Problem Description Corrupt governors always find ways to get dirty money. Paint something, then sel ...
- js之__proto__原型链
可参考: http://blog.csdn.net/irelandken/article/details/7297490
- javascript:function 函数声明和函数表达式 详解
函数声明(缩写为FD)是这样一种函数: 有一个特定的名称 在源码中的位置:要么处于程序级(Program level),要么处于其它函数的主体(FunctionBody)中 在进入上下文阶段创建 影响 ...
- pip3 更改安装源
经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解决被墙导致的装不上库的 ...
- Poj 2853,2140 Sequence Sum Possibilities(因式分解)
一.Description Most positive integers may be written as a sum of a sequence of at least two consecuti ...
- Excel用vlookup方法匹配数据
(1) VLOOKUP是一个查找函数,给定一个查找的目标,它就能从指定的查找区域中查找返回想要查找到的值.它的基本语法为: VLOOKUP(查找目标,查找范围,返回值的列数,精确OR模糊查找) ...