洛谷P5076 【深基16.例7】普通二叉树(简化版)c嘎嘎

news/2024/12/18 13:20:55/

题目链接:P5076 【深基16.例7】普通二叉树(简化版) - 洛谷 | 计算机科学教育新生态

题目难度普及+/提高

 

 解题思路:本题运用了STL中的multiset,它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成,而且他能时刻保证序列中的数是有序的,而且序列中可以存在重复的数(区别于set是不能有重复元素),首先解决这道题用到了lower_bound(返回元素值为X的第一个可安插位置,也就是元素值 >=X的第一个元素位置)和upper_down(返回元素值为X的最后一个可安插位置,也就是元素值 > X 的第一个元素位置)函数,还有multiset的迭代器(multiset<int>::iterator)

常用函数:

multiset<int>q;
//定义一个multiset,尖括号里写类型
//如果是自定义类型,需要重载小于号 q.insert(x);
//插入一个数 x q.clear();
//清空 q.erase(x);
//删除容器中的所有值为 x 的数 q.erase(it);
//删除容器中迭代器it指向的元素 q.empty();
//返回bool值,如果容器为空返回true,否则返回false q.size()
//返回元素个数q.begin();
//返回首个元素的迭代器 q.end();
//返回最后一个元素的下一个位置的迭代器 q.count(x);
//返回容器中 x 的个数 q.find(x);
//返回容器中第一个x的位置(迭代器),如果没有就返回q.end() q.lower_bound(x);
//返回容器中第一个大于等于x的数的迭代器 q.upper_bound(x);
//返回容器中第一个大于x的数的迭代器

 

代码部分:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 110; 
multiset<int>m;
int q,op,x;
int rank1;//记录该数的排位 int main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> q;m.insert(-0x7fffffff);m.insert(0x7fffffff);//提前放入这两个数 while(q--){cin >> op >> x;if(op == 1){auto now = m.lower_bound(x);//返回迭代器 now取得是x的位置 //可以写作multiset<int>::iterator,因为lower_bound方法返回的是迭代器rank1 = 0;for(auto i = m.begin(); i != now; i++,rank1++);//切记要加分号 cout<<rank1<<'\n';//输出排名 }else if(op == 2){rank1 = -1;//前面还有个0x7f7f7f7f7 for(int i:m){if(++rank1 == x) cout<<i<<'\n';}/*也可以这样遍历 for(multiset<int>::iterator i=m.begin();i!=m.end();i++){rank1++;if(rank1==x)cout<<i<<'\n';}*/}else if(op == 3){auto now = m.lower_bound(x);cout << *--now <<'\n'; //因为是迭代器(指针),所以输出前面加 *//由于我们要取得前驱,所以now要自减一}else if(op == 4){cout<<*m.upper_bound(x)<<'\n'; //因为是迭代器(指针),所以输出前面加 *}else{m.insert(x);}}return 0;
}


http://www.ppmy.cn/news/1556130.html

相关文章

CVE-2024-32709 WordPress —— Recall 插件存在 SQL 注入漏洞

漏洞描述 WordPress 是一款免费开源的内容管理系统,适用于各类网站,包括个人博客、电子商务系统、企业网站。其插件 WP-Recall 的 account 存在 SQL 注入漏洞,攻击者可以通过该漏洞获取数据库敏感信息。 WP-Recall 版本 <= 16.26.5 漏洞复现 搭建环境、安装插件、完成…

跟着问题学19——BERT详解(2)

预训练策略 BERT模型的预训练基于两个任务&#xff1a; 屏蔽语言建模 下一句预测 在深入屏蔽语言建模之间&#xff0c;我们先来理解一下语言建模任务的原理。 语言建模 在语言建模任务中&#xff0c;我们训练模型给定一系列单词来预测下一个单词。可以把语言建模分为两类&…

排序算法总结(python实现)

前言 排序算法是一类常见的算法&#xff0c;在学习算法的过程中&#xff0c;都会学习这些排序算法的实现。尽管现在大多数程序语言以及扩展包中对排序算法进行了封装&#xff0c;只要调用接口函数即可实现算法。学习和总结排序算法对于理解算法思维还是很有帮助的。因此本文在…

模拟登录网页

模拟登录与数据采集 今天我们讨论了如何通过 Python 模拟登录并抓取登录后的数据&#xff0c;主要涵盖了以下内容&#xff1a; 模拟登录步骤&#xff1a; 分析登录页面&#xff1a;使用浏览器开发者工具&#xff08;F12&#xff09;分析登录表单&#xff0c;提取表单字段、提…

【echarts】数据过多时可以左右滑动查看(可鼠标可滚动条)

1. 鼠标左右拖动 在和 series 同级的地方配置 dataZoom&#xff1a; dataZoom: [{type: inside, // inside 鼠标左右拖图表&#xff0c;滚轮缩放&#xff1b; slider 使用滑动条start: 0, // 左边的滑块位置&#xff0c;表示从 0 开始显示end: 60, // 右边的滑块位置&#xf…

企业车辆管理系统(源码+数据库+报告)

一、项目介绍 352.基于SpringBoot的企业车辆管理系统&#xff0c;系统包含两种角色&#xff1a;管理员、用户,系统分为前台和后台两大模块 二、项目技术 编程语言&#xff1a;Java 数据库&#xff1a;MySQL 项目管理工具&#xff1a;Maven 前端技术&#xff1a;Vue 后端技术&a…

python基础:(八)文件

目录 一.从文件中读取数据1.1读取整个文件1.2文件路劲1.3逐行读取 二.写入文件 一.从文件中读取数据 各位小伙伴&#xff0c;文件这一块得好好学&#xff0c;多看多敲代码&#xff0c;以后处理数据&#xff0c;写爬虫少不了这个&#xff0c;先从基础&#xff08;简单的&#x…

Loadsh源码分析-filter,find,findLast,reject,partition

lodash源码研读之filter,find,findLast,reject,partition 一、源码地址 GitHub 地址: GitHub - lodash/lodash: A modern JavaScript utility library delivering modularity, performance, & extras.官方文档地址: Lodash 官方文档 二、结构分析 结构框图省略。 三、函…