卧槽。。没看清 值 还有负的。。

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【建最小堆】的更多相关文章

  1. Python3实现最小堆建堆算法

    今天看Python CookBook中关于“求list中最大(最小)的N个元素”的内容,介绍了直接使用python的heapq模块的nlargest和nsmallest函数的解决方式,记得学习数据结构 ...

  2. 《徐徐道来话Java》:PriorityQueue和最小堆

    在讲解PriorityQueue之前,需要先熟悉一个有序数据结构:最小堆. 最小堆是一种经过排序的完全二叉树,其中任一非终端节点数值均不大于其左孩子和右孩子节点的值. 可以得出结论,如果一棵二叉树满足 ...

  3. 数据结构之最小堆的实现C++版

    完全二叉树之所以用数组的方式存在,在于他的一个特性 若子节点为i,则父节点为(i-1)/2,注意c++特性,该结果肯定是个整数. 若父节点为j,则子节点必为2*j+1;则在数组里面可以非常方便的通过下 ...

  4. c++/java/python priority_que实现最大堆和最小堆

    #include<iostream>#include<vector>#include<math.h>#include<string>#include&l ...

  5. 最大堆 最小堆 解决TOPK问题

    堆:实质是一颗完全二叉树,最大堆的特点:父节点值均大于子节点:最小堆的父节点值均小于子节点: 一般使用连续内存存储堆内的值,因而可以根据当前节点的索引值推断子节点的索引值: 节点i的父节点为(i-1) ...

  6. Google 面试题:Java实现用最大堆和最小堆查找中位数 Find median with min heap and max heap in Java

    Google面试题 股市上一个股票的价格从开市开始是不停的变化的,需要开发一个系统,给定一个股票,它能实时显示从开市到当前时间的这个股票的价格的中位数(中值). SOLUTION 1: 1.维持两个h ...

  7. 【数据结构】通用的最小堆(最大堆)D-ary Heap

    听说有一种最小(大)堆,不限于是完全二叉树,而是完全D叉树,名为D-ary Heap(http://en.wikipedia.org/wiki/D-ary_heap).D可以是1,2,3,4,100, ...

  8. 使用最小堆来完成k路归并 6.5-8

    感谢:http://blog.csdn.net/mishifangxiangdefeng/article/details/7668486 声明:供自己学习之便而收集整理 题目:请给出一个时间为O(nl ...

  9. My集合框架第五弹 最小堆

    二叉堆(以最小堆为例),其具有结构性质和堆序性质结构性质: 堆是一棵完全的二叉树,一颗高为h的完全二叉树有2^h到2^h-1个节点,高度为log N            而且该结构可以很容易的使用数 ...

随机推荐

  1. g++能过,c++过不了

    可能原因: 1.在递归的时候,递归函数中忘记加返回return.(详见Wrong Answer,Memory Limit Exceeded) 代码1:错误 g++--------accepted c+ ...

  2. 列存储压缩技巧,除公共除数或者同时减去最小数,字符串压缩的话,直接去重后用数字ID压缩

    Column-store compression At a high level, doc values are essentially a serialized column-store. As w ...

  3. Tomcat_总结_02_单机多实例

    一.tomcat下载及环境变量配置 1.tomcat下载 下载地址:tomcat官网 2.环境变量配置 只用配置一个CATALINA_HOME就可以了 二.CATALINA_HOME 与 CATALI ...

  4. BEC listen and translation exercise 37

    You're supposed to do that before 10.30 in the morning, but obviously, if it's an emergency, you can ...

  5. codeforces 459D D. Pashmak and Parmida's problem(离散化+线段树或树状数组求逆序对)

    题目链接: D. Pashmak and Parmida's problem time limit per test 3 seconds memory limit per test 256 megab ...

  6. Java进阶08 GUI

    GUI(Graphical User Interface)提供了图形化的界面,允许用户以图形的方式与系统进行互动.在GUI推广之前,用户通常要以文本命令的方式来控制计算机.GUI直观的将计算机的功能呈 ...

  7. Mybatis generator配置文件及说明

    项目采用sring mvc + mybatis 组合,这里简单介绍下mybatis的应用: 我的IDE是STS(Spring + Tool + Suite), 安装Mybatis Generator插 ...

  8. bzoj 4103: 异或运算 可持久化Trie

    题目大意: 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值\(A_{ij} = x_i \text{ xor } y_j ...

  9. python为类定义构造函数

    用python进行OO编程时, 经常会用到类的构造函数来初始化一些变量. class FileData:     def __init__(self, data, name, type):       ...

  10. 文件上传框的美化+预览+ajax

    1.文件上传基本写法: <input type="file" name="" id="" value="" /&g ...