【个人笔记】BST二叉搜索树模板

news/2025/2/24 20:43:47/文章来源:https://www.cnblogs.com/2789617221guo/p/18734815

【个人笔记】BST(Binary Search Tree)二叉搜索树代码模板

#include <bits/stdc++.h>
#define endl '\n'using namespace std;const int INF = 0x7fffffff;
const double EPS = 1e-8;
const int N = 1e4 + 5;struct node {int left;int right;int value;int cnt;int siz;
} tree[N];int q, ncnt;void add(int x, int root) {tree[root].siz++;if (tree[root].value == x) {tree[root].cnt++;return;}if (x < tree[root].value) {if (tree[root].left) {add(x, tree[root].left);} else {tree[++ncnt].value = x;tree[ncnt].siz = tree[ncnt].cnt = 1;tree[root].left = ncnt;}} else {if (tree[root].right) {add(x, tree[root].right);} else {tree[++ncnt].value = x;tree[ncnt].siz = tree[ncnt].cnt = 1;tree[root].right = ncnt;}}
}int pre(int x, int root, int ans) {if (tree[root].value >= x) {if (tree[root].left) {return pre(x, tree[root].left, ans);} else {return ans;}} else {if (!tree[root].right) {return (tree[root].value < x) ? tree[root].value : ans;}if (tree[root].cnt != 0) {return pre(x, tree[root].right, tree[root].value);} else {return pre(x, tree[root].right, ans);}}
}int post(int x, int root, int ans) {if (tree[root].value <= x) {if (tree[root].right)return post(x, tree[root].right, ans);elsereturn ans;} else {if (!tree[root].left) {return (tree[root].value > x) ? tree[root].value : ans;}if (tree[root].cnt != 0) {return post(x, tree[root].left, tree[root].value);} else {return post(x, tree[root].left, ans);}}
}int rk(int x, int root) {if (root == 0)return 0;if (x == tree[root].value)return tree[tree[root].left].siz;if (x < tree[root].value)return rk(x, tree[root].left);elsereturn rk(x, tree[root].right) + tree[tree[root].left].siz +tree[root].cnt;
}int kth(int x, int root) {if (root == 0)return INF;if (tree[tree[root].left].siz >= x) {return kth(x, tree[root].left);}if (tree[tree[root].left].siz + tree[root].cnt >= x) {return tree[root].value;}return kth(x - tree[tree[root].left].siz - tree[root].cnt,tree[root].right);
}int main() {cin >> q;while (q--) {int op, x;cin >> op >> x;switch (op) {case 1:cout << rk(x, 1) + 1 << endl;break;case 2:cout << kth(x, 1) << endl;break;case 3:cout << pre(x, 1, -INF) << endl;break;case 4:cout << post(x, 1, INF) << endl;break;case 5:if (ncnt == 0) {ncnt++;tree[ncnt].value = x;tree[ncnt].cnt = tree[ncnt].siz = 1;} elseadd(x, 1);break;default:break;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/889183.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Prompt入门

Prompt,,提示词,是使用生成式AI的必备前提,好的提示词能让生成式AI给出更精准的结果,不仅能节省时间,还能节省tokens(这可是美金呀),所以在生成式AI出来后,就有Prompt Engineer提示工程师之说。于是,就有很多分享提示的文章,还有很多网站,专门收集各种场合的提示词…

SEO完全指南 从原理到实战的搜索引擎优化手册 第三章SEO与内容优化

第三章:SEO与内容 1. 基于算法的内容优化策略 搜索引擎算法的主要目标是为用户提供最相关、最有价值的内容。这些算法使用复杂的机器学习模型来理解和评估网页内容。它们考虑多个因素,包括关键词的使用、内容的深度和质量、用户交互数据以及网站的整体结构和权威性。要在搜索…

【攻防世界】CatchCat

上网一查发现是GPS数据文件 到这个GPS绘图网址上传.txt文件即可 还有一种方法,先转为KML文件txt2kml网址kml绘图

智能化客户行为轨迹分析:AI视频监控在大型商场的技术方案介绍(part7)

项目背景:为了提升顾客体验并支持精准营销,卖场或商场需要通过智能化手段分析客户在商场内的行为路线。一、具体需求 1、行为路径分析:跟踪顾客在商场内的移动轨迹,了解顾客的购物习惯和偏好。 2、高频活动区域识别:通过分析顾客停留和活动频率,识别出顾客聚集的区域。 3…

在Android源码中为APK编译系统权限

在Android源码中为APK编译系统权限,授权使用 android:sharedUserId="android.uid.system" 系统权限,可以在Android开发中授予更多功能,以瑞芯微3568平台为例系统权限获取 打包为APK进行系统签名对于 部分功能的访问需要使用到系统权限,需要 添加 android:shared…

PNG图片宽高隐写

https://www.cnblogs.com/senior-engineer/p/9548347.html

[tldr] vscode的remote插件的config文件内容解析

参考VS Code Remote SSH配置 解决了什么问题 vscode的remote插件可以直接通过可视化的UI新建一个连接通过ssh指令添加服务器的连接方式但是这种方式添加的服务器名字等于服务器IP地址,难以理解 如果出现同一个IP地址,使用不同端口的SSH,那么会被视作同一个服务器,因为连接名字和…

使用Go复刻skiplist核心功能

0、引言 正好做LC每日一题要求实现一个跳表,于是学习了redis的扩展skiplist,并使用Go进行复刻学习。学习参考了文章:Redis内部数据结构详解(6)——skiplist - 铁蕾的个人博客 因为作者能力有限,本文只是对跳表的核心功能:创建节点与跳表、插入节点、删除节点、获取节点ran…

BUUCTF-RE-[ACTF新生赛2020]usualCrypt

又他妈的是新生赛,我都不是新生了还天天被折磨。 首先查壳分析,然后反编译程序,可以看到程序逻辑还是比较简单的我们进行一下整理和重命名,可以得到完整的程序逻辑: int __cdecl main(int argc, const char **argv, const char **envp) {int v3; // esichar v5[15]; // [e…

探秘Transformer系列之(6)--- token

从零开始解析Transformer,目标是:(1) 解析Transformer如何运作,以及为何如此运作,让新同学可以入门;(2) 力争融入一些比较新的或者有特色的论文或者理念,让老鸟也可以有所收获。探秘Transformer系列之(6)--- token 0x00 概述 语言是人类特有的概念。作为一个抽象符号,…

leetcode hot 10

解题思路:滑动窗口问题,关键在于记录之前出现过的字符,当遍历过程中碰到之前出现的,就从之前出现的下一个作为start,实时比较当前值和最长值并赋值,最后返回最长值。java可以采用hashmap记录出现过的字符,value保存它的位置+1的值,作为出现重复的字符的时候的start的参考…

摆脱 Deepseek 服务器繁忙,手把手教你接入火山引擎 API(超详细版)

大家好,我是亿舟。大家最近应该都被 Deepseek 刷屏了,不少人想去试试 Deepseek 有多厉害,但是去到官网,没问几个问题,就弹出来“服务器繁忙,稍后再试”。今天教给大家一个方法,可以在 Cherry Studio 配合上火山引擎的 API,享受满血版、联网搜索、思考不截断的 Deepseek…