【洛谷】P2343 宝石管理系统
题目地址:
https://www.luogu.com.cn/problem/P2343
题目描述:
GY君购买了一批宝石放进了仓库。有一天GY君心血来潮,想要清点他的宝石,于是把mmm个宝石都取出来放进了宝石管理系统。每个宝石iii都有一个珍贵值viv_ivi,他希望你能编写程序查找到从大到小第nnn珍贵的宝石。但是现在问题来了,他非常不小心的留了一些宝石在仓库里面,有可能要往现有的系统中添加宝石。这些宝石的个数比较少。他表示非常抱歉,但是还是希望你的系统能起作用。
输入格式:
第一行两个整数m,qm,qm,q,表示已经取出来的宝石个数以及接下来的查询或插入操作个数。
第二行mmm个正整数,表示这mmm个宝石的珍贵值。
以下qqq行,每行两个整数c,nc,nc,n。
若c=1c=1c=1(即询问),则输出当前第nnn珍贵的宝石。
若c=2c=2c=2(即插入),则往系统中插入珍贵值为nnn的宝石。
输出格式:
对于每个c=1c=1c=1(询问),输出当前第nnn珍贵的宝石的珍贵值viv_ivi。
数据范围:
对于50%50\%50%的数据,没有c=2c=2c=2的情况;
对于100%100\%100%的数据,m≤100000m\leq 100000m≤100000,c=2c=2c=2的情况不超过100001000010000次,q≤30000q\leq 30000q≤30000,1≤vi<2311 \leq v_i \lt 2^{31}1≤vi<231。
可以用Treap,参考https://blog.csdn.net/qq_46105170/article/details/118997891。代码如下:
#include <iostream>
using namespace std;const int N = 2e5 + 10;
int n, m;
struct Node {int l, r;int key, val;int cnt, sz;
} tr[N];
int root, idx;void pushup(int p) { tr[p].sz = tr[tr[p].l].sz + tr[tr[p].r].sz + tr[p].cnt; }void zig(int &p) {int q = tr[p].l;tr[p].l = tr[q].r, tr[q].r = p, p = q;pushup(tr[p].r);
}void zag(int &p) {int q = tr[p].r;tr[p].r = tr[q].l, tr[q].l = p, p = q;pushup(tr[p].l);
}int get_node(int key) {tr[++idx].key = key;tr[idx].val = rand();tr[idx].cnt = tr[idx].sz = 1;return idx;
}void insert(int &p, int x) {if (!p)p = get_node(x);else if (x < tr[p].key) {insert(tr[p].l, x);if (tr[tr[p].l].val > tr[p].val) zig(p);} else if (x > tr[p].key) {insert(tr[p].r, x);if (tr[tr[p].r].val > tr[p].val) zag(p);} elsetr[p].cnt++;pushup(p);
}int get_key_by_rank(int p, int rank) {if (rank <= tr[tr[p].l].sz)return get_key_by_rank(tr[p].l, rank);else if (rank > tr[tr[p].l].sz + tr[p].cnt)return get_key_by_rank(tr[p].r, rank - tr[tr[p].l].sz - tr[p].cnt);elsereturn tr[p].key;
}int main() {scanf("%d%d", &n, &m);while (n--) {int x;scanf("%d", &x);insert(root, x);}while (m--) {int op, x;scanf("%d%d", &op, &x);if (op == 1)printf("%d\n", get_key_by_rank(root, tr[root].sz - x + 1));elseinsert(root, x);}
}
时间复杂度O((m+n)log(m+n))O((m+n)\log (m+n))O((m+n)log(m+n)),空间O(m+n)O(m+n)O(m+n)。
【洛谷】P2343 宝石管理系统相关推荐
- 洛谷 P2343 宝石管理系统
洛谷 P2343 宝石管理系统 Description GY君购买了一批宝石放进了仓库.有一天GY君心血来潮,想要清点他的宝石,于是把m个宝石都取出来放进了宝石管理系统.每个宝石i都有一个珍贵值vi, ...
- 洛谷 2343 宝石管理系统 题解
博客观赏效果更佳 题意简述 给定一个序列,维护两种操作,加入一个数,求第kkk大的数. 思路 很明显这个题目珂以用平衡树做.但是,有一个引人深思的问题:你会写平衡树么? 但是, 颤抖吧,我可是会写ST ...
- 洛谷P3755 [CQOI2017]老C的任务 题解
题目传送门 题目描述 老C是个程序员. 最近老C从老板那里接到了一个任务--给城市中的手机基站写个管理系统.作为经验丰富的程序员,老C轻松地完成了系统的大部分功能,并把其中一个功能交给你来实现. 由于 ...
- 用C语言构造康托集,洛谷——P1014 Cantor表
P1014 Cantor表 题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 - 2/1 ...
- 洛谷P4474 王者之剑(吾王的题目!!!)
蒟蒻第一次发题解,看官点个赞再走QwQ 题目链接 https://www.luogu.org/problem/P4474 题目描述 这是在阿尔托利亚·潘德拉贡成为英灵前的事情,她正要去拔出石中剑成为亚 ...
- 洛谷-题解 P2672 【推销员】
独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...
- 洛谷 P1142 轰炸
洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...
- 洛谷 P1387 最大正方形
P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...
- 洛谷P2763 试题库问题
题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...
最新文章
- 【问题解决方案】ImportError: No module named 'openpyxl'/‘xlrd’
- 12个Visual Studio调试效率技巧
- 网络交换机功能和原理详解
- 前端学习(2185):tabberitem和路由结果
- Moodle: 如何修改moodle——theme主题皮肤
- 苹果或推出不到两千元的iPhone!安卓手机不淡定了
- WIN7下VS2005 VS2008 SQLSERVER2005安装顺序
- xtrabackup 备份
- brctl 设置ip_brctl命令
- MINT:蛋白质相互作用数据库简介
- mysql免安装版教程视频_MySQL免安装版安装教程
- Ultimate Tic-Tac-Toe
- Excel学习日记:L22-时间格式工龄与工时的计算
- 近段时间参加的CTF竞赛部分题目复现(ISCC2020 、GKCTF、网鼎杯)
- jquery+ajax+ashx。ashx的使用方法
- Python you-get 库的使用方法
- mysql 加盐_【mysql】当加盐算法需要改变,数据库该如何更新?
- Linux btrfs文件系统
- 用vue-cli创建项目后npm run serve 报错Component name “main“ should always be multi-word vue/multi-word-compo
- 智慧农业·智能灌溉系统
热门文章
- pycharm修改界面主题颜色
- 计量实证模型-SFA双边随机前沿分界模型代码合集分享,亲测有效
- html静态页面作业 家乡介绍-南京(7页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业
- 知微传感Dkam系列3D相机SDK例程篇:点云滤波
- 复数类 java_用java写一个复数类Complex
- Intelij idea实现简单的个人所得税EJB组件并用webservice服务封装以及常见的几个问题解决思路
- python3通过winrm远程执行windows服务器dos命令
- USB声卡之时钟模式分析
- 微软语音输入法的图标隐藏了在怎么显示出来
- [原创]《让我们一起CCNA吧》 系列文章一:网际互连及思科认证考试介绍