当前位置:网站首页>二叉树专题--【深基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;
}
边栏推荐
猜你喜欢

Sus system availability scale

shell编程01_Shell基础

The nanny level tutorial of flutter environment configuration makes the doctor green to the end

Ks009 implement pet management system based on SSH

Dialogue Wu Gang: why do I believe in the rise of "big country brands"?

Jsp webshell Free from killing - The Foundation of JSP

Flink submitter

【AGC】如何解决事件分析数据本地和AGC面板中显示不一致的问题?

Flink calculates topn hot list in real time
![[visual studio] visual studio 2019 community version cmake development environment installation (download | install relevant components | create compilation execution project | error handling)](/img/9f/4265f1e3927fcf66602f0fc9e7a9d9.jpg)
[visual studio] visual studio 2019 community version cmake development environment installation (download | install relevant components | create compilation execution project | error handling)
随机推荐
UVM - configuration mechanism
2. Hacking lab script off [detailed writeup]
Oracle notes
MySQL lethal serial question 3 -- are you familiar with MySQL locks?
大华设备播放过程中设置播放速度
MySQL environment configuration
JSP webshell免杀——webshell免杀
From Read and save in bag file Jpg pictures and PCD point cloud
Common methods of JS array
Operator-1初识Operator
Nodejs+express+mysql simple blog building
Mysql database remote access permission settings
PCL之滤波
2022-06-17
Learn open62541 -- [66] UA_ Generation method of string
js setTimeout()与面试题
AttributeError: type object ‘Image‘ has no attribute ‘fromarray‘
14.信号量的代码实现
最详细MySql安装教程
Shutter - canvas custom graph