题目链接

https://www.patest.cn/contests/gplt/L2-012

思路

使用 STL 里面有关 Heap 的函数

std::make_heap将[start, end)范围进行堆排序,默认使用less, 即最大元素放在第一个。

std::pop_heap将front(即第一个最大元素)移动到end的前部,同时将剩下的元素重新构造成(堆排序)一个新的heap。

std::push_heap对刚插入的(尾部)元素做堆排序。

std::sort_heap将一个堆做排序,最终成为一个有序的系列,可以看到sort_heap时,必须先是一个堆(两个特性:1、最大元素在第一个 2、添加或者删除元素以对数时间),因此必须先做一次make_heap.

make_heap, pop_heap, push_heap, sort_heap都是标准算法库里的模板函数,用于将存储在vector/deque 中的元素进行堆操作

根据 题目的意思 是要用 push_heap 一个一个 插入

而不能用 make_heap

因为 push_heap 和 make_heap 构造的堆 是不一样的

比如

3 6 2 4 1 5 这组数据

make_heap

push_heap

然后 用一个 map 将元素 与其 数组下标 对应起来 要从1 开始

根节点 就是判断一下 其数组下标 是不是 1

x 和 y 是兄弟节点

就是 判断一下

a = x 的数组下标 / 2

b = y 的数组下标 / 2

a 对应的数 和b 对应的数 是不是相等 并且 a != b

x 是 y 的父节点

就是 判断一下 y 的数组下标 / 2 是不是 等于 x 的数组下标

x 是

x 是 y 的子节点

就是 判断一下 x 的数组下标 / 2 是不是 等于 y 的数组下标

AC 代码

#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <set>
#include <numeric>
#include <sstream>
#include <iomanip>
#include <limits> #define CLR(a) memset(a, 0, sizeof(a)) using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair<string, int> psi;
typedef pair<string, string> pss; const double PI = 3.14159265358979323846264338327;
const double E = exp(1);
const double eps = 1e-6; const int INF = 0x3f3f3f3f;
const int maxn = 1e3 + 5;
const int MOD = 1e9 + 7; int main()
{
map <int, int> vis;
int n, m, num;
scanf("%d%d", &n, &m);
vector <int> v;
for (int i = 0; i < n; i++)
{
scanf("%d", &num);
num = -num;
v.push_back(num);
push_heap(v.begin(), v.end());
}
for (int i = 0; i < n; i++)
vis[-v[i]] = i + 1;
while (m--)
{
int a, b, c, d;
string s;
cin >> a;
cin >> s;
if (s == "and") //2
{
cin >> b;
cin >> s;
cin >> s;
c = vis[a];
d = vis[b];
if (v[c / 2] == v[d / 2] && c != d)
cout << "T\n";
else
cout << "F\n";
}
else
{
cin >> s;
if (s == "the")
{
cin >> s;
if (s == "root") //1
{
if (vis[a] == 1)
cout << "T\n";
else
cout << "F\n";
}
else // 3
{
cin >> s;
cin >> b;
c = vis[a];
d = vis[b];
if (d / 2 == c)
cout << "T\n";
else
cout << "F\n";
}
}
else //4
{
cin >> s;
cin >> s;
cin >> b;
c = vis[a];
d = vis[b];
if (c / 2 == d)
cout << "T\n";
else
cout << "F\n";
}
}
}
}

PAT 天梯赛 L2-012. 关于堆的判断 【Heap】【STL】的更多相关文章

  1. PAT天梯赛 L1-049 天梯赛座位分配

    题目链接:点击打开链接 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] ...

  2. PAT天梯赛L3-007 天梯地图

    题目链接:点击打开链接 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至 ...

  3. PAT天梯赛练习题——L3-007. 天梯地图(多边权SPFA)

    L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...

  4. PTA天梯赛L2

    L2-001 紧急救援 题意:就是给你一张n<500的图:让你求最短路径,最短路条数,以及路径: 做法,先用dijkstra求最短路,然后dfs找最短路条数,以及点权的最大值: 一般dfs不就可 ...

  5. L2-012. 关于堆的判断(STL中heap)

    L2-012. 关于堆的判断   将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “x is the root”:x是根结点: “x and y ...

  6. PAT天梯赛练习题 L3-002. 堆栈(线段树查询第K大值或主席树)

    L3-002. 堆栈 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 大家都知道“堆栈”是一种“先进后出”的线性结构,基本操作有 ...

  7. PAT天梯赛练习题 L3-010. 是否完全二叉搜索树(完全二叉树的判断)

    L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...

  8. PAT天梯赛练习题 L3-011. 直捣黄龙(多关键字SPFA+DFS)

    L3-011. 直捣黄龙 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题是一部战争大片 —— 你需要从己方大本营出发,一路 ...

  9. PAT天梯赛练习题 L2-013 红色警报(并查集+逆序加边)

    L2-013. 红色警报 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 战争中保持各个城市间的连通性非常重要.本题要求你编写一 ...

随机推荐

  1. Ubuntu 开机引导文件 /etc/default/grub

    # If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. GRUB_DEFAUL ...

  2. JDBC编程理论知识(1)

    1.SUN公司为统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC 2.JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组 ...

  3. 工作总结 返回 json 后台对象中,某一个字段设为string 整个对象转换为json 返回到页面中

    JsonRequestBehavior.AllowGet作用 若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet MVC 默认 Request 方式为 Po ...

  4. Ubuntu Server 命令行下显示中文乱码(菱形)解决办法

    如果Ubuntu Server在安装过程中,选择的是中文(很多新手都会在安装时选择中文,便于上手),这样在完成安装后,系统默认的语言将会是中文zh_CN.UTF- 8.但问题是我们安装的是服务器,只需 ...

  5. python中wxpython用法

    转载:https://wxpython.org/pages/overview/ Hello World Every programming language and UI toolkit needs ...

  6. 李洪强经典面试题40-可能碰到的iOS笔试面试题-C语言

    可能碰到的iOS笔试面试题(4)--C语言 可能碰到的iOS笔试面试题(4)--C语言 C语言,开发的基础功底,iOS很多高级应用都要和C语言打交道,所以,C语言在iOS开发中的重要性,你懂的.里面的 ...

  7. NPOI 计算单元格高度

    需求 要导出一个Excel,第一行是不定长字符串,合并单元格(A-G)已知,现要计算第一行的高度. 思路 已知,NPOI的宽度单位是1/256个英文字符,在本例中,A列的宽度是2048,即 2048 ...

  8. CSDN开源夏令营 基于Compiz的switcher插件设计与实现之前期准备 git的简单使用

    因为项目的代码须要上传到git上.就须要学习一下git的使用了. 我初步接触了一下git,准备用此帖来记录git的学习,此帖会随着我对git了解的深入动态更新. 一.GIT的介绍 1.概述:git是一 ...

  9. rsync 删除大量小文件

    3 find with delete 复制代码代码如下:  test  time find ./ -type f -delete        find ./ -type f -delete  0.4 ...

  10. IE8 兼容 getElementsByClassName

    IE8以下版本没有getElementsByClassName这个方法,以下是兼容写法 function ieGetElementsByClassName() { if (!document.getE ...