思路:

1. 此处的fhq treap的分裂是按照权值分裂然后插入的。将小于k的分为一棵子树,大于等于k的分为另一棵子树。

2. 删除的时候只要将大于等于min的分裂到以root为根的树中,另一部分不用管,扔掉。

3. 维护一个加标记,注意不要忘记某个地方的pushdown和pushup

其他就是fhq treap的基本操作了

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ls a[x].l
  4. #define rs a[x].r
  5. const int N = 1e5 + ;
  6. int root, tot, ans;
  7. struct tree{
  8. int l, r, atag, val, dat, siz;
  9. }a[N];
  10. struct fhq_treap{
  11. void newnode(int &x, int val){
  12. a[x = ++tot].dat = rand(); a[x].siz = ; a[x].val = val;
  13. }
  14. void addone(int x, int val){
  15. if(!x) return;
  16. a[x].val += val; a[x].atag += val;
  17. }
  18. void up(int x){
  19. if(!x) return ;
  20. a[x].siz = a[ls].siz + a[rs].siz + ;
  21. }
  22. void down(int x){
  23. if(!x) return;
  24. if(a[x].atag) addone(ls, a[x].atag), addone(rs, a[x].atag);
  25. a[x].atag = ;
  26. }
  27. void Merge(int &x, int l, int r){
  28. if(!l || !r) x = l + r;
  29. else if(a[l].dat < a[r].dat) down(x = l), Merge(rs, rs, r), up(x);
  30. else down(x = r), Merge(ls, l, ls), up(x);
  31. }
  32. void split(int x, int k, int &l, int &r){
  33. if(!x) l = r = ;
  34. else{
  35. down(x);
  36. if(a[x].val < k) l = x, split(rs, k, rs, r);
  37. else r = x, split(ls, k, l, ls);
  38. }
  39. up(x);
  40. }
  41. void ins(int val){
  42. int x;
  43. newnode(x, val);
  44. int l, r;
  45. split(root, val, l, r); Merge(l, l, x); Merge(root, l, r);
  46. }
  47. int getval(int x, int rank){
  48. if(x == ) return -;
  49. down(x);
  50. if(a[rs].siz >= rank) return getval(rs, rank);
  51. if(a[rs].siz + >= rank) return a[x].val;
  52. return getval(ls, rank - a[rs].siz - );
  53. }
  54. void del(int val){
  55. int l;
  56. split(root, val, l, root);
  57. }
  58. }treap;
  59. int n, lim, k;
  60. char ch[];
  61. int main(){
  62. scanf("%d%d", &n, &lim);
  63. while(n--){
  64. scanf("%s%d", ch, &k);
  65. if(ch[] == 'I'){
  66. if(k >= lim) treap.ins(k), ans++;
  67. }
  68. else if(ch[] == 'A') treap.addone(root, k);
  69. else if(ch[] == 'S') treap.addone(root, -k), treap.del(lim);
  70. else printf("%d\n", treap.getval(root, k));
  71. }
  72. printf("%d\n", ans - a[root].siz);
  73. return ;
  74. }

洛谷 P1486 BZOJ 1503 NOI 2004 郁闷的出纳员 fhq treap的更多相关文章

  1. [bzoj 1503][NOI 2004]郁闷的出纳员(平衡树)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 分析: 经典的平衡树题,我用Treap做的 下面有几点注意的: 1.可能出现新加入的人的 ...

  2. bzoj 1503[NOI 2004] 郁闷的出纳员

    题目大意: 给4种操作 I:添加一个员工工资信息 A:增加所有员工的工资 S:减少所有员工的工资 F:询问工资第k高的员工的工资情况 自己做的第一道splay树的题目,初学找找感觉 #include ...

  3. 洛谷 1486/BZOJ 1503 郁闷的出纳员

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 13866  Solved: 5069[Submit][Stat ...

  4. [BZOJ 1503]郁闷的出纳员(fhq treap)

    [BZOJ 1503]郁闷的出纳员 题面 第一行有两个非负整数n和min.n表示下面有多少条命令,min表示工资下界. 接下来的n行,每行表示一条命令.命令可以是以下四种之一: 名称 格式 作用 I命 ...

  5. 数据结构(跳跃表):NOI 2004 郁闷的出纳员

    郁闷的出纳员 [问题描述] OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常, ...

  6. 洛谷 2042 BZOJ 1500 NOI 2005 维护数列

    [题意概述] 维护一个数列,要求支持以下6种操作: [题解] 大Boss...可以用Treap解决 需要用到垃圾回收.线性建树. #include<cstdio> #include< ...

  7. NOI 2004 郁闷的出纳员(平衡树)

    题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...

  8. NOI 2004 郁闷的出纳员

    Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...

  9. 洛谷 P3369 BZOJ 3224 【模板】普通平衡树(Treap/SBT)

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(若有多个相同的数,因输出最小的排名) 查询 ...

随机推荐

  1. APP端测试,常见功能测试点汇总

    除去每个产品和版本不同的业务需求以及功能,针对于大多数的APP的共同点和移动设备的特性,本文总结了一些APP功能测试中经常遇见,需要考虑到的测试点以共参考 一.安装和卸载 应用的安装和卸载在任何一款A ...

  2. OAI搭建总结

    我是参考网上的方法:oai搭建之eNB的文章, 接下来就根据自身所遇到的问题再这里总结一下步骤: 一.再官网上下载oai的文件openairinterface5g-master.zip 二.编译的过程 ...

  3. Unity编辑器扩展 Chapter3--Create Custom Inspector

    一.Create Custom Inspector 重绘inspector面板一方面是我们的挂在脚本的窗口变得友好,另一方面可以让其变得更强大,比如添加一些有效性验证. 二.重要说明 1.Editor ...

  4. application/x-www-urlencoded与multipart/form-data

    学习ajax时,学到了GET与POST两种HTTP方法,于是去W3C看了二者的区别,里面提到了二者的编码类型不同,就在网上查阅了相关资料, 在这里把我查阅到的相关结果记录在此,方便以后学习,详细了解一 ...

  5. 《图解 HTTP 》阅读 —— 第四章

    第4章 返回结果的HTTP状态码 1XX 接收的请求正在处理 2XX 请求被处理 200 请求成功 204 请求成功,但是没有返回数据 206 客户端进行了范围请求 3XX 重定向 301 永久性重定 ...

  6. 关于JavaScript定时器我的一些小理解

    因为自己在平时工作中,有些功能需要用到定时器,但是定时器并不像我们表边上看到的那样,所以这周末我看看书查查资料,深入研究了一下JavaScript中的定时器,那么废话不多说,下面进入我们今天的正题. ...

  7. 你应该知道的PHP库

    Libchart – 这也是一个简单的统计图库. JpGraph – 一个面向对象的图片创建类. Open Flash Chart – 这是一个基于Flash的统计图. RSS 解析 解释RSS并是一 ...

  8. Beta阶段第2周/共2周 Scrum立会报告+燃尽图 04

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2412 版本控制地址    [https://git.coding.net/ ...

  9. 王者荣耀交流协会第一次scrum会议

    照片: 拍照的人是我(高远博),没有出镜.开会时间是17:00到17:37. 昨天的成绩: (1)优化了折线图界面 今天的计划: (1)小组成员汇报昨日成果. (2)小组成员继续推进任务. 遇到的困难 ...

  10. Linux 安装php扩展 swoole

    swoole是一个PHP的异步.并行.高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncT ...