思路:
treap (算是基本操作吧…..)
加减的操作数很少 就暴力好啦
每回判断一下最小的数是不是比M小
如果是 就删,继续判断

搞定。

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,M,xx,size,root,jy,ans;
char op[3];
struct Treap{int ch[2],rnd,cnt,sz,v;}tr[300050];
void Upd(int k){tr[k].sz=tr[tr[k].ch[0]].sz+tr[tr[k].ch[1]].sz+tr[k].cnt;}
void rot(int &k,bool f){int t=tr[k].ch[f];tr[k].ch[f]=tr[t].ch[!f],tr[t].ch[!f]=k,Upd(k),Upd(t),k=t;}
void insert(int &k,int num){if(!k){k=++size;tr[k].sz=tr[k].cnt=1,tr[k].v=num,tr[k].rnd=rand();return;}tr[k].sz++;if(tr[k].v==num){tr[k].cnt++;return;}bool f=num>tr[k].v;insert(tr[k].ch[f],num);if(tr[tr[k].ch[f]].rnd<tr[k].rnd)rot(k,f);
}
void dfs(int k,int num){tr[k].v+=num;if(tr[k].ch[0])dfs(tr[k].ch[0],num);if(tr[k].ch[1])dfs(tr[k].ch[1],num);
}
int rank(int k,int num){if(tr[tr[k].ch[1]].sz>=num)return rank(tr[k].ch[1],num); else if(tr[tr[k].ch[1]].sz+tr[k].cnt>=num)return tr[k].v;else return rank(tr[k].ch[0],num-tr[tr[k].ch[1]].sz-tr[k].cnt);
}
int get_min(int k){if(tr[k].ch[0])return get_min(tr[k].ch[0]);return tr[k].v;
}
void del(int &k,int num){if(tr[k].v==num){if(tr[k].cnt>1)tr[k].cnt--,tr[k].sz--;else if(tr[k].ch[0]*tr[k].ch[1]==0)k=max(tr[k].ch[0],tr[k].ch[1]);else rot(k,tr[tr[k].ch[0]].rnd>tr[tr[k].ch[1]].rnd),del(k,num);}else tr[k].sz--,del(tr[k].ch[num>tr[k].v],num);
}
int main(){scanf("%d%d",&n,&M);for(int i=1;i<=n;i++){scanf("%s%d",op,&xx);if(op[0]=='I'){if(xx>=M)insert(root,xx);}else if(op[0]=='S')dfs(root,-xx);else if(op[0]=='A')dfs(root,xx);else {if(xx<=tr[root].sz)printf("%d\n",rank(root,xx));else puts("-1");}while(tr[root].sz&&(jy=get_min(root))<M)ans++,del(root,jy);}printf("%d\n",ans);
}

转载于:https://www.cnblogs.com/SiriusRen/p/6532155.html

BZOJ 1503 treap相关推荐

  1. BZOJ 1503: [NOI2004]郁闷的出纳员 Treap

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

  2. BZOJ 1503 [NOI2004] 郁闷的出纳员 treap

    题意: 链接 方法: treap 解析: 这是本蒟蒻的第二道treap题,第二遍写的时候update,左旋右旋,插入函数都可以大概写出来了(还是得练啊),然而del  函数却被虐了,自己也想到用个什么 ...

  3. BZOJ 1503 郁闷的出纳员(splay)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 题意:给出一个数列(初始为空),给出一个最小值Min,当数列中的数字小于Min时自动 ...

  4. BZOJ 3544 treap (set)

    我只是想找个treap的练习题-- 每回找到lower_bound 就好啦 //By SiriusRen #include <cstdio> #include <cstring> ...

  5. bzoj 1503 郁闷的出纳员 (平衡树+前缀和)

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

  6. [BZOJ]1503: [NOI2004]郁闷的出纳员

    SB平衡树 #include<cstdio> #define MN 100000 #define L(x) c[x][0] #define R(x) c[x][1] #define rtf ...

  7. BZOJ 3224 Treap

    部分还没调到满意的程度,效率比splay略好 #include<bits/stdc++.h> using namespace std; const int maxn = 1e6+11; u ...

  8. bzoj 1503 (权值线段树)

    由于蒟蒻实在是ttttttai 菜了,于是开始了学习主席树,权值线段树作为主席树的前置知识,于是蒟蒻各种百度百度,谷歌谷歌,抄网上的代码,然后终于A了这个题目.也还算是有一点收获. 题目:芝麻开门 题 ...

  9. BZOJ 3224: Tyvj 1728 普通平衡树【Treap】

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一些数 ...

最新文章

  1. 面试官如何判断面试者的机器学习水平?
  2. tensorflow中keep_prob的修改方法
  3. 【硬件】运放的那些事儿
  4. promise学习记录
  5. 批处理start命令学习
  6. 关于MySQL使用Float存储时的精度问题
  7. 插入始终是1_插入式电磁流量计特点与应用
  8. Java web后端7JSTL
  9. github可视化工具_Github标星2.6K!微软开源的可视化工具,未免太酷炫了吧
  10. HTML CSS——margin和padding的学习
  11. python实用技巧(一)
  12. 关于 TCP window size
  13. Photoshop CC 2018 软件安装包+破解教程(转)
  14. Windows无法启动MapGIS DataStorage Service服务
  15. Tcl经典报错之 —— variable references require preced
  16. 已解决(Python运行报错)SyntaxError: expression cannot contain assignment, perhaps you meant “==“?
  17. 不换门可以改开门的方向吗_防盗门可以更改开门方向吗?
  18. PPT打开之后不能编辑,怎么解决?
  19. idea如何配置或者创建mybatis的xml文件 idea如何配置或者创建mybatis的配置文件
  20. 计算机三级可以入东莞户口吗,初中的家长注意了,非东莞户籍在东莞中考读高中,必须满足3个条件!...

热门文章

  1. CTFshow 命令执行 web30
  2. poj 3349 雪花
  3. 图像中添加二项式分布噪声
  4. c++派生类和基类的构造函数和析构函数
  5. 第二章:2.6 LTI系统特性与单位冲击信号的关系
  6. linux内核 header.s,Linux启动代码header.S研究
  7. python学习笔记四-列表
  8. 练习二十一:关于猴子吃桃的问题
  9. Androidstudio 使用git插件提交代码
  10. Unable to load the Wrapper's native library because none of the following files及解决方法