当前位置:网站首页>二叉树专题--【深基16.例7】普通二叉树(简化版)(multiset 求前驱 后继 哨兵法)
二叉树专题--【深基16.例7】普通二叉树(简化版)(multiset 求前驱 后继 哨兵法)
2022-07-02 07:21:00 【Morgannr】
【深基16.例7】普通二叉树(简化版)
题目描述
您需要写一种数据结构,来维护一些数( 都是 1 0 9 10^9 109 以内的数字)的集合,最开始时集合是空的。其中需要提供以下操作,操作次数 q q q 不超过 1 0 4 10^4 104:
- 查询 x x x 数的排名(排名定义为比当前数小的数的个数 + 1 +1 +1。若有多个相同的数,应输出最小的排名)。
- 查询排名为 x x x 的数。
- 求 x x x 的前驱(前驱定义为小于 x x x,且最大的数)。若未找到则输出 − 2147483647 -2147483647 −2147483647。
- 求 x x x 的后继(后继定义为大于 x x x,且最小的数)。若未找到则输出 2147483647 2147483647 2147483647。
- 插入一个数 x x x。
输入格式
输出格式
样例 #1
样例输入 #1
7
5 1
5 3
5 5
1 3
2 2
3 3
4 3
样例输出 #1
2
3
1
5
学到一个黑科技,当使用 multiset 求某个值的 前驱 / 后继 时,我们可以先往 multiset 中插入一个正无穷和一个负无穷两个哨兵,之后,找 前驱 / 后继 就无需特殊判断了。
注意,本题对于 前驱 / 后继 的定义是:小于 x / 大于 x,且 最大 / 最小 的数。
具体代码片段如下:
tr.insert(inf), tr.insert(-inf); //插入哨兵
auto p1 = tr.lower_bound(x);
int down = *(--p1); //前驱
auto p2 = tr.upper_bound(x);
int up = *p2; //后继
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <bits/stdc++.h>
using namespace std;
//#define int long long
//#define map unordered_map
const int N = 1e4 + 10, inf = 2147483647;
signed main()
{
int T = 1; //cin >> T;
while (T--)
{
multiset<int> tr;
tr.insert(inf), tr.insert(-inf);
int n; cin >> n;
while (n--)
{
int op, x;
cin >> op >> x;
if (op == 5)
{
tr.insert(x);
}
else if (op == 1)
{
int rk = 0;
for (auto i = tr.begin(); i != tr.end(); i++)
{
if ((*i) < x)
{
rk++;
}
}
cout << rk << '\n';
}
else if (op == 2)
{
int rk = 0;
int tgt;
for (auto i = tr.begin(); i != tr.end(); i++)
{
rk++;
if (rk == x + 1)
{
tgt = (*i);
break;
}
}
cout << tgt << '\n';
}
else if (op == 3)
{
auto p = tr.lower_bound(x);
int down = *(--p);
cout << down << '\n';
}
else if (op == 4)
{
auto p = tr.upper_bound(x);
int up = *p;
cout << up << '\n';
}
}
}
return 0;
}
边栏推荐
- 2022-06-17
- session-cookie与token
- Stm32 et développement de moteurs (système supérieur)
- Session cookies and tokens
- Nodejs+express+mysql simple blog building
- JSP webshell免杀——JSP的基础
- js setTimeout()与面试题
- Hdu1228 a + B (map mapping)
- 2. Hacking lab script off [detailed writeup]
- STM32 and motor development (upper system)
猜你喜欢

《实习报告》Skywalking分布式链路追踪?

Flutter——Canvas自定义曲线图

《MySQL 8 DBA基础教程》简介

MongoDB 学习整理(条件操作符,$type 操作符,limit()方法,skip() 方法 和 sort() 方法)

Kustomize user manual

HDU1228 A + B(map映射)

Stm32 et développement de moteurs (système supérieur)

Shutter - canvas custom graph

1287_ Implementation analysis of prvtaskistasksuspended() interface in FreeRTOS

Database dictionary Navicat automatic generation version
随机推荐
【快应用】Win7系统使用华为IDE无法运行和调试项目
集成学习概览
Pywin32打开指定窗口
Stm32 et développement de moteurs (système supérieur)
Leetcode+ 76 - 80 storm search topic
Flutter——Canvas自定义曲线图
14.信号量的代码实现
Point cloud projection picture
LeetCode+ 76 - 80 暴搜专题
Session cookies and tokens
【AGC】构建服务3-认证服务示例
2022爱分析· 国央企数字化厂商全景报告
PCL 点云转深度图像
如何用list组件实现tabbar标题栏
全网显示 IP 归属地,是怎么实现的?
Read H264 parameters from mediarecord recording
Sus system availability scale
MySQL数据库远程访问权限设置
Mysql database remote access permission settings
Convert yv12 to rgb565 image conversion, with YUV to RGB test