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 而且该结构可以很容易的使用数 ...
随机推荐
- mysql的SQL_CALC_FOUND_ROWS 使用 类似count(*) 使用性能更高
mysql的SQL_CALC_FOUND_ROWS 使用 类似count(*) 使用性能更高 在很多分页的程序中都这样写: SELECT COUNT(*) from `table` WHERE ... ...
- Python—numpy.bincount()
1.它大致说bin的数量比x中的最大值大1,每个bin给出了它的索引值在x中出现的次数.下面,我举个例子让大家更好的理解一下: # 我们可以看到x中最大的数为7,因此bin的数量为8,那么它的索引值为 ...
- json-lib简单处理json和对json的简单介绍
JSON 1.json是什么? *它是js提供的一种数据交换格式 2.json的语法 *{}:是对象! >属性名必须使用双引号括起来!单引号不行!!! >属性值: *null *数值 *数 ...
- linux apt-get remove如何恢复
linux卸载或删除软件时,若不小心删除到关联的软件,如果想撤销删除操作需要在/var/log/apt/history.log中依次安装删除的软件,具体操作如下: $echo '#!/bin/bash ...
- hdu-5583 Kingdom of Black and White(数学,贪心,暴力)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5583 Kingdom of Black and White Time Limit: 2000/1000 ...
- HihoCoder1664 01间隔方阵([Offer收割]编程练习赛40)(DP)
给定一个NxM的01矩阵,小Hi希望从中找到一个01间隔的子方阵,并且方阵的边长越大越好. 例如对于 0100100 1000101 0101010 1010101 0101010 在右下角有一个4x ...
- 汇编题目:在窗口上显示Welcome to masm!
题目:在屏幕中间分别显示绿色.绿底红色.白底蓝色的字符串'welcome to masm!'. 该程序题目来自<王爽 汇编语言_第2版>的188页的说明.相关资料也在上面都有详细说明. 题 ...
- 洛谷【P1090】合并果子&&洛谷【P1334】瑞瑞的木板
浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 合并果子题目传送门:https://www.luogu.org/problemnew/show/P1 ...
- BZOJ1972:[SDOI2010]猪国杀
我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...
- 【转】 Pro Android学习笔记(七三):HTTP服务(7):AndroidHttpClient
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csdn.net/flowingflying/ 不知道此文是否是这个系列中最短的一篇.我们 ...