BZOJ1503——郁闷的出纳员
1、题目大意:一道treap题,支持插入,询问第K大,还有全体修改+上一个值,如果某个点值小于x,那么就删除这个点
插入100000次,询问100000次,修改100次。。最后输出删了多少个点
2、分析:首先看修改是100次的,我就没有多想什么lazy,什么的
就是名次树,修改的话,我们就遍历treap,全部修改我们就O(n)搞一下
最后说一个坑爹的地方,就是插入前就否认的点不算T_T
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
struct Node{
Node* ch[2];
int r, v, s, c;
inline bool operator < (const Node& rhs) const{
return r < rhs.r;
}
inline int cmp(int x){
if(x == v) return -1;
if(x < v) return 0;
return 1;
}
inline void maintain(){
s = c;
if(ch[0] != NULL) s += ch[0] -> s;
if(ch[1] != NULL) s += ch[1] -> s;
return;
}
};
Node ft[500000];
struct treap{
Node *p;
int cnt;
inline void init(){
cnt = -1;
p = NULL;
return;
}
inline void rotate(Node* &o, int d){
Node *k = o -> ch[d ^ 1];
o -> ch[d ^ 1] = k -> ch[d];
k -> ch[d] = o;
o -> maintain();
k -> maintain();
o = k;
return;
}
inline void insert(Node* &o, int x){
if(o == NULL){
o = &ft[++ cnt];
o -> ch[0] = o -> ch[1] = NULL;
o -> v = x;
o -> r = rand();
o -> c = 1;
}
else if(o -> v == x) o -> c ++;
else{
int d = o -> cmp(x);
insert(o -> ch[d], x);
if(o -> ch[d] -> r > o -> r) rotate(o, d ^ 1);
}
o -> maintain();
return;
}
inline void A(Node* &o, int x){
if(o == NULL) return;
o -> v += x;
A(o -> ch[0], x);
A(o -> ch[1], x);
return;
}
inline void S(Node* &o, int x){
while(o != NULL && o -> v < x) o = o -> ch[1];
if(o == NULL) return;
if(o -> ch[0] != NULL) S(o -> ch[0], x);
if(o -> ch[1] != NULL) S(o -> ch[1], x);
if(o != NULL) o -> maintain();
return;
}
inline int k_th(Node* &o, int k){
int ls = 0, rs = 0;
if(o -> ch[0] != NULL) ls = o -> ch[0] -> s;
if(ls >= k) return k_th(o -> ch[0], k);
else if(ls + o -> c >= k) return o -> v;
else return k_th(o -> ch[1], k - ls - o -> c);
}
} wt;
int main(){
int n, m, orz = 0;
scanf("%d%d", &n, &m);
wt.init();
for(int i = 1; i <= n; i ++){
char str[5]; int k;
scanf("%s%d", str, &k);
if(str[0] == 'I'){
if(k >= m){
orz ++;
wt.insert(wt.p, k);
}
}
else if(str[0] == 'A') wt.A(wt.p, k);
else if(str[0] == 'F'){
if(wt.p == NULL || k > wt.p -> s) printf("-1\n");
else printf("%d\n", wt.k_th(wt.p, wt.p -> s - k + 1));
}
else {
wt.A(wt.p, -k);
wt.S(wt.p, m);
}
}
printf("%d\n", orz - wt.p -> s);
return 0;
}
BZOJ1503——郁闷的出纳员的更多相关文章
- bzoj1503 郁闷的出纳员
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经 ...
- [BZOJ1503]郁闷的出纳员(Splay)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- bzoj1503 郁闷的出纳员 splay版
自己yy的写法 可能有点奇怪吧 详情看代码 还是蛮短的 #include<cstdio> #include<cstring> #include<algorithm> ...
- bzoj1503 郁闷的出纳员(平衡树,思维)
题目大意: 现在有n个操作和一个最低限度m \(I\)命令\(I\ k\)新建一个工资档案,初始工资为k. \(A\)命令$A\ k $把每位员工的工资加上k \(S\)命令$S\ k $把每位员工的 ...
- [BZOJ1503][NOI2004]郁闷的出纳员
[BZOJ1503][NOI2004]郁闷的出纳员 试题描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是 ...
- bzoj1503 [NOI2004]郁闷的出纳员(名次树+懒惰标记)
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 8705 Solved: 3027[Submit][Statu ...
- [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
- 【bzoj1503】[NOI2004]郁闷的出纳员
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 13890 Solved: 5086[Submit][Stat ...
- bzoj1503: [NOI2004]郁闷的出纳员(伸展树)
1503: [NOI2004]郁闷的出纳员 题目:传送门 题解: 修改操作一共不超过100 直接暴力在伸展树上修改 代码: #include<cstdio> #include<cst ...
随机推荐
- PHPCMSv9首页显示分页点击下一页跳转链接出现错误,跳转到后台的解决方案
1 引用页写为 {pc:content action="lists" catid="10" order="updatetime DESC" ...
- php5.1以上版本时间戳_时间戳与日期格式转换_相差8小时 的解决方案
php5.1以上时间戳会与实际时间相差8小时,解决办法如下 .最简单的方法就是不要用php5.1以上的版本--显然这是不可取的方法!!! .修改php.ini.打开php.ini查找date.time ...
- string find
string类的查找函数: ) const;//从pos开始查找字符c在当前字符串的位置 ) const;//从pos开始查找字符串s在当前串中的位置 int find(const char *s, ...
- bs4_3select()
Finding an Element with the select() Method 调用select()方法从BeautifulSoup对象索取网页元素,并用CSS 选择器传递你寻找的元素 ...
- Java关键字——final
final在Java中表示的意思是最终,使用final关键字声明类属性.方法,注意: 1.使用final声明的类不能有子类 2.使用final声明的方法不能被子类所覆写 3.使用final声明的变量即 ...
- linux 开机启动过程详解
Linux开机执行内核后会启动init进程,该进程根据runlevel(如x)执行/etc/rcx.d/下的程序,其下的程序是符号链接,真正的程序放在/etc/init.d/下.开机启动的程序(服务等 ...
- Windows 无法自动将 IP 协议堆栈绑定到网络适配器。解
Windows 无法自动将 IP 协议堆栈绑定到网络适配器.解 昨天断网了,所以把珍藏已久的无线网卡拿出来蹭网.我系统是Windows 7 但是装上去东显示已启用,就是用不了,用windows诊断是 ...
- Struct Member Default Value
在C#中struct是值类型的数据类型,其默认值相当于调用了无参数默认构造函数之后的值.这也许就是struct不允许重载无参数默认构造函数的原因. https://msdn.microsoft.com ...
- ecshop show_message
格式lib_main.php show_message(内容, array(返回列表,继续编辑), array(连接地址一,链接地址二, 'info',false); true:自动跳转 输出: fu ...
- iOS项目重命名以及Xcode修改Scheme名称图文详解 (yoowei)
在iOS开发中,有时候想改一下项目的名字,都会遇到很多麻烦.温馨提醒:记得备份. 看到项目名称,总感觉有点low,所以尝试着要将其更改一下. 项目原结构如下: 更改后的项目结构如下: 下面开始更改操作 ...