BZOJ 1503 郁闷的出纳员(splay)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1503
题意:给出一个数列(初始为空),给出一个最小值Min,当数列中的数字小于Min时自动删除。四种操作:(1)数列中增加一个元素,设置初始值x;若x小于Min则不插入;(2)所有的元素增加一个值det;(3)所有的元素减小一个值det;此时有可能有一些会被删除(4)询问目前所有元素中第K大的。最后输出删除了多少个。
思路:首先,因为增加和减小是对所有元素而言,因此这个值我们不插入而是单独保存,设这个值为det。那么插入一个元素x,我们插入x-det,这样保持插入的所有元素的真实值都是其加上det。然后,每次减小时,我们需要进行删除,那么插入一个Min-det的节点,并将其调整到根节点,然后左子树就是被删除的。之后,将根节点的右节点变为根节点。
int tot,root,k[N],L[N],R[N],f[N],s[N];
inline void pushUp(int x)
{
if(x) s[x]=s[L[x]]+s[R[x]]+1;
}
inline void zig(int x)
{
int y=f[x],z=f[y];
if(z) L[z]==y?L[z]=x:R[z]=x;
f[x]=z;
L[y]=R[x];
if(R[x]) f[R[x]]=y;
R[x]=y;
f[y]=x;
pushUp(y);
pushUp(x);
}
inline void zag(int x)
{
int y=f[x],z=f[y];
if(z) L[z]==y?L[z]=x:R[z]=x;
f[x]=z;
R[y]=L[x];
if(L[x]) f[L[x]]=y;
L[x]=y;
f[y]=x;
pushUp(y);
pushUp(x);
}
inline void splay(int x)
{
int y;
while(y=f[x])
{
if(f[y])
{
if(L[f[y]]==y) L[y]==x?(zig(y),zig(x)):(zag(x),zig(x));
else R[y]==x?(zag(y),zag(x)):(zig(x),zag(x));
}
else L[y]==x?zig(x):zag(x);
}
root=x;
}
inline void insert(int key)
{
int x=root,y=0;
for(;x;y=x,x=key<=k[x]?L[x]:R[x]);
k[x=++tot]=key;
if(y) key<=k[y]?L[y]=x:R[y]=x;
f[x]=y; s[x]=1; splay(x);
}
inline int select(int K)
{
int x=root;
for(;s[L[x]]+1!=K;K<=s[L[x]]?x=L[x]:(K-=s[L[x]]+1,x=R[x]));
splay(x);
return k[x];
}
int main()
{
int n,m,d=0,ans=0;
RD(n,m);
while(n--)
{
char op[10];
int x;
scanf("%s%d",op,&x);
if(op[0]=='I'&&x>= m) insert(x-d);
else if(op[0]=='A') d+=x;
else if(op[0]=='S')
{
insert(m-(d-=x));
ans+=s[L[root]]; root=R[root]; f[root]=0;
pushUp(root);
}
else if(op[0]=='F') PR(x>s[root]?-1:select(s[root]-x+1)+d);
}
PR(ans);
return 0;
}
BZOJ 1503 郁闷的出纳员(splay)的更多相关文章
- bzoj 1503郁闷的出纳员(splay)
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 11759 Solved: 4163[Submit][Stat ...
- [BZOJ 1503]郁闷的出纳员(fhq treap)
[BZOJ 1503]郁闷的出纳员 题面 第一行有两个非负整数n和min.n表示下面有多少条命令,min表示工资下界. 接下来的n行,每行表示一条命令.命令可以是以下四种之一: 名称 格式 作用 I命 ...
- 洛谷 1486/BZOJ 1503 郁闷的出纳员
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 13866 Solved: 5069[Submit][Stat ...
- BZOJ 1503 郁闷的出纳员 (treap)
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 13370 Solved: 4808[Submit][Stat ...
- BZOJ 1503 郁闷的出纳员(平衡树)(NOI 2004)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作 ...
- BZOJ 1503 郁闷的出纳员
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- BZOJ[NOI2004]郁闷的出纳员 | Splay板子题
题目: 洛谷也能评测....还有我wa了10多次的记录233 题解: 不要想得太复杂,搞一个全局变量记录一下工资的改变量Delta,这样可以等询问的时候就输出val+Delta,然后插入的时候插入x- ...
- BZOJ 1503: [NOI2004]郁闷的出纳员 splay
1503: [NOI2004]郁闷的出纳员 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作 ...
- NOI2004 郁闷的出纳员 Splay
郁闷的出纳员 [问题描述] OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常, ...
随机推荐
- 内核futex的BUG导致程序hang死问题排查
https://mp.weixin.qq.com/s/sGS-Kw18sDnGEMfQrbPbVw 内核futex的BUG导致程序hang死问题排查 原创: 王领先 58架构师 今天 近日,Had ...
- oracle查询表结构语句
select o.table_name, tmp.comments, o.COLUMN_NAME, t.comments, o.DATA_TYPE || CASE TRIM(o.DATA_TYPE) ...
- SQL Server 学习博客分享列表(应用式学习 + 深入理解)
SQL Server 学习博客分享列表(应用式学习 + 深入理解) 转自:https://blog.csdn.net/tianjing0805/article/details/75047574 SQL ...
- chown 命令
root@localhost ~]# .txt # 同时修改文件属主和属组 !chown 执行上一个chown命令
- springmvc接收参数
springmvc执行流程 搭建ssm框架:http://www.cnblogs.com/liyafei/p/7955413.html 1:从表单中接收 普通请求参数 结构目录 role.html 1 ...
- [参考资料] 80个Python经典资料(教程+源码+工具)汇总
AD : 2018重磅地面课程<机器读心术之语音识别前沿实战特训营>,迈向人工智能新高度 [专题推荐]Python系列英文原版电子书 http://down.51cto.com/zt/10 ...
- 1:4 UI标签和通用标签
UI标签:负责用户界面输出的标签. 非标单:例如错误信息提示的标签 fielderror,actionerror,actionmessagr:系统错误消息的自动显示 通 ...
- libsvm java版本使用心得(转)
http://blog.csdn.net/u010340854/article/details/19159883 https://github.com/cjlin1/libsvm 项目中要用到svm分 ...
- python 展开嵌套的序列
将一个多层嵌套的序列展开成一个单层列表 可以写一个包含yield from 语句的递归生成器来轻松解决这个问题. from collections import Iterable def flatte ...
- PowerDesigner逆向操作(从mysql5.0生成数据库的物理模型),把Comment写到name中,pdm文件导出为word
PowerDesigner逆向操作(从mysql5.0生成数据库的物理模型) 环境:powderdesigner12.5:mysql5.0步骤:1. 为指定的数据库配置mysql的ODBC数据源先下载 ...