problem

L2-012 关于堆的判断 (25分)
将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:

x is the root:x是根结点;
x and y are siblings:x和y是兄弟结点;
x is the parent of y:x是y的父结点;
x is a child of y:x是y的一个子结点。
输入格式:
每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[−10000,10000]内的N个要被插入一个初始为空的小顶堆的整数。之后M行,每行给出一个命题。题目保证命题中的结点键值都是存在的。

输出格式:
对输入的每个命题,如果其为真,则在一行中输出T,否则输出F。

输入样例:
5 4
46 23 26 24 10
24 is the root
26 and 23 are siblings
46 is the parent of 23
23 is a child of 10
输出样例:
F
T
F
T

手写堆

  • 给定一个长为n的序列,建立小顶堆。
  • 给出m个询问,判断根节点,兄弟节点,父节点,子节点关系。

solution

  • 建堆:没写过堆,但是跟线段树一样是完全二叉树,可以用数组存储,子节点编号p<<1,p<<1|1,perfect。
  • 题目要求按顺序建堆,所以边插入边向上调整。(不能转为二叉树再向下调整)
  • 父子关系当且仅当2n或2n+1时,当x%2==0且x,y相邻时为兄弟
#include<bits/stdc++.h>
using namespace std;
const int maxn = 10010;int n, m;
vector<int>v;
void update(int i){if(i==1)return ;while(i!=1){if(v[i]<v[i/2]){swap(v[i],v[i/2]);i /= 2;}else{break;}}
}void judge1(int x){if(v[1]==x)cout<<"T\n";else cout<<"F\n";
}
void judge2(int x, int y){int px = 0, py = 0;for(int i = 1; i <= n; i++){if(v[i]==x)px = i;if(v[i]==y)py = i;}if(px>py)swap(px,py);if(px%2==0&&py-px==1)cout<<"T\n";//相邻且父节点相同else cout<<"F\n";
}
void judge3(int x, int y){int px = 0, py = 0;for(int i = 1; i <= n; i++){if(v[i]==x)px = i;if(v[i]==y)py = i;}if(px*2==py||px*2+1==py)cout<<"T\n";//父子当且仅当2n或2n+1时else cout<<"F\n";
}
void judge4(int x, int y){int px = 0, py = 0;for(int i = 1; i <= n; i++){if(v[i]==x)px = i;if(v[i]==y)py = i;}swap(px,py);if(px*2==py||px*2+1==py)cout<<"T\n";else cout<<"F\n";
}int main(){cin>>n>>m;v.resize(n+1);for(int i = 1; i <= n; i++){cin>>v[i];  update(i);}for(int i = 1; i <= m; i++){int x,y;string z;cin>>x>>z;if(z=="and"){cin>>y>>z>>z;judge2(x,y);}else{cin>>z;if(z=="a"){cin>>z>>z>>y;judge4(x,y);}else{cin>>z;if(z=="root"){judge1(x);}else{cin>>z>>y;judge3(x,y);}}}}return 0;
}

【CCCC】L2-012 关于堆的判断 (25分),,手写堆,二叉树编号,向上调整相关推荐

  1. 7-42 关于堆的判断 (25 分)

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

  2. 7-1 关于堆的判断 (25 分)

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

  3. 【解析】基础实验4-2.5 关于堆的判断 (25 分)

    立志用最少的代码做最高效的表达 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y are ...

  4. 关于堆的判断 (25 分)

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

  5. L2-012 关于堆的判断 (25 分)

    写在前面的废话 今天把追了两个星期的小说看完了-感觉很是感慨啊, 在这里纪念一下: 我欲乘风向北行,雪落轩辕大如席. 我欲借船向东游,绰约仙子迎风立. 我欲踏云千万里,庙堂龙吟奈我何? 昆仑之巅沐日光 ...

  6. 堆(手写堆包含STL)

     文章目录 前言 一.堆的定义 二.堆的分类及性质(STL的用法) 1.堆的分类 2.STL的用法 3.堆的性质 三.手写堆(重点) 1.手写堆的思想 2.函数模块 3.操作模块 四.完整代码 + 注 ...

  7. 恶补C++:重载手写堆结构体lower_bound()vector构造、析构函数setmappairstack

    部分目录 运算符重载 C++ 函数调用运算符 () 重载 我的经历 关于this 关于友元 附:重载函数 C++补充 优先队列 手写堆 手写堆的存储 手写堆的两个基本操作 插入节点的原理 求当前堆的最 ...

  8. 大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别)

    大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别) 定义 Heap是一种数据结构具有以下的特点: 1)完全二叉树: 2)heap中存储的值是 ...

  9. Duan2baka的手写堆模板!

    随手翻到了去年写的手写堆- -手写堆真是太蠢了 Lheap:小根堆 Rheap:大根堆 #include<algorithm> #include<cstring> #inclu ...

最新文章

  1. 十厂商发起成立软件自律联盟
  2. mysql select 所有表_怎样用SQL语句查询一个数据库中的所有表
  3. android http get
  4. UVA----10082 WERTYU【字符串】
  5. RCF - C ++的进程间通信
  6. python - 2 8 16进制/颜色/字符编码
  7. 我眼中未来的人机交互
  8. 【雷达通信】基于matlab Omiga-K算法SAR回波生成和成像【含Matlab源码 1184期】
  9. javascript代码混淆的原理
  10. 科来网络分析器11下载地址
  11. 滴答乐园一直显示连接服务器,滴答乐园iOS版-滴答乐园快手互粉2020苹果iOS版预约 v1.0-优盘手机站...
  12. Python运行报错most recent call last
  13. 错误-The server encountered an unexpected condition that prevented it from fulfilling the request
  14. 各种数据库中的时间日期类型
  15. 联想拯救者y7000电池耗电快_联想拯救者Y7000游戏本测评之温度、续航双测评
  16. 寒武纪加速平台(MLU200系列) 摸鱼指南(三)--- 模型移植-分割网络实例
  17. 认识机器学习与深度学习
  18. RTD2785T RTD2785R 2K eDP屏驱动芯片介绍
  19. UE4 材质笔记之墙面(纹理混合+顶点颜色应用)
  20. Microsoftware Project 的安装和使用不需要连接project server

热门文章

  1. 用决策树模型求解回归问题(regression tree)
  2. windows 路径
  3. Tricks(二十二) —— zip(python) 的实现及使用
  4. sklearn 细节 —— LinearRegression、Ridge
  5. python自学行吗-上万程序员总结:自学Python,掌握到什么程度就可以找工作了?...
  6. 手机上有没有学python的软件-如何优雅的在手机上进行Python编程
  7. 笔记本电脑下载python视频-如何用Python在笔记本电脑上分析100GB数据(下)
  8. python教程视频哪个好-Python视频教程谁的好
  9. python画简便的图-如何用python画M集(1)——M集原始图的画法
  10. 自学python顺序-python数据结构学习之实现线性表的顺序