题目地址:

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 宝石管理系统相关推荐

  1. 洛谷 P2343 宝石管理系统

    洛谷 P2343 宝石管理系统 Description GY君购买了一批宝石放进了仓库.有一天GY君心血来潮,想要清点他的宝石,于是把m个宝石都取出来放进了宝石管理系统.每个宝石i都有一个珍贵值vi, ...

  2. 洛谷 2343 宝石管理系统 题解

    博客观赏效果更佳 题意简述 给定一个序列,维护两种操作,加入一个数,求第kkk大的数. 思路 很明显这个题目珂以用平衡树做.但是,有一个引人深思的问题:你会写平衡树么? 但是, 颤抖吧,我可是会写ST ...

  3. 洛谷P3755 [CQOI2017]老C的任务 题解

    题目传送门 题目描述 老C是个程序员. 最近老C从老板那里接到了一个任务--给城市中的手机基站写个管理系统.作为经验丰富的程序员,老C轻松地完成了系统的大部分功能,并把其中一个功能交给你来实现. 由于 ...

  4. 用C语言构造康托集,洛谷——P1014 Cantor表

    P1014 Cantor表 题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 - 2/1 ...

  5. 洛谷P4474 王者之剑(吾王的题目!!!)

    蒟蒻第一次发题解,看官点个赞再走QwQ 题目链接 https://www.luogu.org/problem/P4474 题目描述 这是在阿尔托利亚·潘德拉贡成为英灵前的事情,她正要去拔出石中剑成为亚 ...

  6. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  7. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  8. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  9. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

最新文章

  1. 【问题解决方案】ImportError: No module named 'openpyxl'/‘xlrd’
  2. 12个Visual Studio调试效率技巧
  3. 网络交换机功能和原理详解
  4. 前端学习(2185):tabberitem和路由结果
  5. Moodle: 如何修改moodle——theme主题皮肤
  6. 苹果或推出不到两千元的iPhone!安卓手机不淡定了
  7. WIN7下VS2005 VS2008 SQLSERVER2005安装顺序
  8. xtrabackup 备份
  9. brctl 设置ip_brctl命令
  10. MINT:蛋白质相互作用数据库简介
  11. mysql免安装版教程视频_MySQL免安装版安装教程
  12. Ultimate Tic-Tac-Toe
  13. Excel学习日记:L22-时间格式工龄与工时的计算
  14. 近段时间参加的CTF竞赛部分题目复现(ISCC2020 、GKCTF、网鼎杯)
  15. jquery+ajax+ashx。ashx的使用方法
  16. Python you-get 库的使用方法
  17. mysql 加盐_【mysql】当加盐算法需要改变,数据库该如何更新?
  18. Linux btrfs文件系统
  19. 用vue-cli创建项目后npm run serve 报错Component name “main“ should always be multi-word vue/multi-word-compo
  20. 智慧农业·智能灌溉系统

热门文章

  1. pycharm修改界面主题颜色
  2. 计量实证模型-SFA双边随机前沿分界模型代码合集分享,亲测有效
  3. html静态页面作业 家乡介绍-南京(7页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业
  4. 知微传感Dkam系列3D相机SDK例程篇:点云滤波
  5. 复数类 java_用java写一个复数类Complex
  6. Intelij idea实现简单的个人所得税EJB组件并用webservice服务封装以及常见的几个问题解决思路
  7. python3通过winrm远程执行windows服务器dos命令
  8. USB声卡之时钟模式分析
  9. 微软语音输入法的图标隐藏了在怎么显示出来
  10. [原创]《让我们一起CCNA吧》 系列文章一:网际互连及思科认证考试介绍