平衡树维护总第K大;插入

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define R(a,b,c) for(register int  a = (b); a <= (c); ++ a)
#define nR(a,b,c) for(register int  a = (b); a >= (c); -- a)
#define Max(a,b) ((a) > (b) ? (a) : (b))
#define Min(a,b) ((a) < (b) ? (a) : (b))
#define Fill(a,b) memset(a, b, sizeof(a))
#define Abs(a) ((a) < 0 ? -(a) : (a))
#define Swap(a,b) a^=b^=a^=b
#define ll long long#define ON_DEBUG#ifdef ON_DEBUG#define D_e_Line printf("\n\n----------\n\n")
#define D_e(x)  cout << #x << " = " << x << endl
#define Pause() system("pause")
#define FileOpen() freopen("in.txt","r",stdin);#else#define D_e_Line ;
#define D_e(x)  ;
#define Pause() ;
#define FileOpen() ;#endifstruct ios{template<typename ATP>ios& operator >> (ATP &x){x = 0; int f = 1; char c;for(c = getchar(); c < '0' || c > '9'; c = getchar()) if(c == '-')  f = -1;while(c >= '0' && c <= '9') x = x * 10 + (c ^ '0'), c = getchar();x*= f;return *this;}
}io;
using namespace std;const int N = 100007;struct Treap{int ch[2], fa, tot, val, siz;
}t[N << 2];
int treeIndex, root;
inline void Pushup(int rt){t[rt].siz = t[t[rt].ch[0]].siz + t[t[rt].ch[1]].siz + t[rt].tot;
}
inline int Ident(int x){return t[t[x].fa].ch[1] == x;
}
inline void Rotate(int x){int y = t[x].fa, z = t[y].fa, k = Ident(x);t[z].ch[Ident(y)] = x, t[x].fa = z;t[y].ch[k] = t[x].ch[k ^ 1], t[t[x].ch[k ^ 1]].fa = y;t[x].ch[k ^ 1] = y, t[y].fa = x;Pushup(y), Pushup(x);
}
inline void Splay(int x, int pos){while(t[x].fa != pos){int y = t[x].fa, z = t[y].fa;if(z != pos){Ident(x) == Ident(y) ? Rotate(y) : Rotate(x);}Rotate(x);}if(!pos) root = x;
}
inline void Insert(int x){int u = root, fa = 0;while(u && t[u].val != x){fa = u;u = t[u].ch[x > t[u].val];}if(u){++t[u].tot; }else{u = ++treeIndex;t[u].val = x;t[u].ch[0] = t[u].ch[1] = 0;t[u].tot = t[u].siz = 1;t[u].fa = fa;if(fa) t[fa].ch[x > t[fa].val] = u;}Splay(u, 0);
}
inline int Kth(int x){int u = root;if(t[u].siz < x) return 0;while(1){int v = t[u].ch[1];if(t[v].siz + t[u].tot < x){x -= t[v].siz + t[u].tot;u = t[u].ch[0];}else if(t[v].siz >= x){u = v;}else{return t[u].val;}}
}int main(){
//FileOpen();int n, m;io >> n >> m;Insert(2147483647);Insert(-2147483647);R(i,1,n){int x;io >> x;Insert(x);}while(m--){int opt, x;io >> opt >> x;if(opt == 1){printf("%d\n", Kth(x + 1));}else{Insert(x);}}return 0;
}

转载于:https://www.cnblogs.com/bingoyes/p/11264088.html

Luogu2343 宝石管理系统(平衡树)相关推荐

  1. 洛谷 P2343 宝石管理系统

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

  2. 【洛谷】P2343 宝石管理系统

    题目地址: https://www.luogu.com.cn/problem/P2343 题目描述: GY君购买了一批宝石放进了仓库.有一天GY君心血来潮,想要清点他的宝石,于是把mmm个宝石都取出来 ...

  3. [题解]LuoGu2343:宝石管理系统

    原题传送门 法1 Splay 一眼树状数组水过, 然后发现可以用splaysplaysplay 就来练手啦 十分基本的insert与kth操作 然后因为查询的是第k大,所以我改了一下kth 本来是先跟 ...

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

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

  5. 【学习笔记】Splay

    普通平衡树 模板题链接 1.引入 一种二叉树,这棵树满足任意一个节点,它的左儿子的权值<自己的权值<右儿子的权值 这种树叫做二叉查找树,这个概念应该在初赛中见过了吧 Splay就是利用这个 ...

  6. 基于二叉平衡树的学生信息管理系统

    二叉平衡树的插入,删除函数参考了这位大佬的代码 详见 https://www.cnblogs.com/sench/p/7786718.html添加链接描述 对函数进行了一点改进 注意:本程序中的二叉平 ...

  7. 以“文博珠宝管理系统”为例,分析信息管理系统在物流分销中的应用

    文博珠宝物流分销管理系统功能简介 本系统采用分布式服务器/客户端软件结构,为大型应用提供可靠性和扩展性的保证,支持SQL SERVER大型数据库,数据库基于Windows NT.Windows 200 ...

  8. 基于ssm的医院病历管理系统SSM医院管理系统

    基于ssm医院病历管理系统 基于ssm医院病历管理系统 今天给大家分享一下基于SSM的医院病历管理系统,希望能帮助大学哈~~ 介绍: eclipse ,mysql,spring,springmvc,m ...

  9. 关于数据库管理系统DBMS--关系型数据库(MySQL/MariaDB)

    数据库管理系统--DBMS:用来管理数据库 数据库的结构(3种):层次,网状,关系型(用的最多):DBMS的三层模型:视图层:面向最终用户:逻辑层:面向程序员或DBA:物理层:面向系统管理员:关系型数 ...

最新文章

  1. linux下接口持续集成,部署jenkins持续集成工具
  2. Fedora下如何删除以前的老内核
  3. 让你少写 1000 行代码的正则全攻略来了!
  4. 数据结构(单链表的相关操作)
  5. 在Ubuntu系统下如何将chrome浏览器的bookmarks导出到本地
  6. 【Java】蒙提霍尔问题的概率原理及随机化模拟
  7. 基于Bounding Box的激光点云聚类
  8. 看了这个视频都想辞职了
  9. 2月10日 感知器+浅层神经网络+反向传播+tensorflow
  10. linux vim命令的意思,Linux 中 vim 是什么意思?
  11. 一站式教育直播系统源码
  12. 基于Springboot+MySQL的个人健康监控管理系统
  13. 4、金字塔原理:演示的逻辑(10-12)-阅读笔记
  14. Keras-YOLOV3-tensorflow制作训练自己的数据集
  15. SAS Visual Analytics(VA)安装教程
  16. c语言小游戏跳一跳代码及注释,c语言小游戏程序之弹跳小球的实现代码
  17. 炼丹笔记三:数据增强
  18. 国外PHP免费空间速度评测
  19. JavaScript形而上的单例模式
  20. Ardunio开发实例-简单声音感应控制开关

热门文章

  1. 【Pyqt5】进度条QProgressBar的使用/多线程更新/按钮美化/图片编码/开机自启动
  2. 网络小说“北宋小厨师”中的HR片段
  3. 计算机趣味知识竞赛题库,2019年趣味知识竞赛试题题库及答案
  4. 【MybBatis细节篇】MyBatis中#{}和${}的区别
  5. wordpress 后台卡_如何在您的WordPress网站上轻松接受信用卡付款
  6. AlienSkinExposureX8必备的图片后期PS处理软件
  7. 【2022新书】机器学习在金融时间序列分析与预测中的应用
  8. “智能”创造未来:PDU智能化全面提升IDC数据中心用电能效!
  9. Redis高可用集群部署和集群扩展
  10. 《推荐系统》-FM模型