原文链接http://www.cnblogs.com/zhouzhendong/p/8086240.html


题目传送门 - BZOJ1503


题意概括

如果某一个员工的工资低于了min,那么,他会立即离开,并且一定不会回来了。

最后还要输出一个整数,表示离开公司的员工的总数。


题解

  还是splay裸题。

  加一个懒标记就可以了。

  注意,如果一个人还没有进入公司就因为工资太少而走了,不计入离开公司的员工数中


代码

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=100005;
int fa[N],son[N][2],add[N],val[N],size[N],total,root;
void spt_clear(){
total=root=0;
memset(fa,0,sizeof fa);
memset(son,0,sizeof son);
memset(add,0,sizeof add);
}
void pushup(int x){
size[x]=size[son[x][0]]+size[son[x][1]]+1;
}
void pushson(int x,int v){
add[x]+=v,val[x]+=v;
}
void pushdown(int x){
for (int i=0;i<2;i++)
if (son[x][i])
pushson(son[x][i],add[x]);
add[x]=0;
}
void pushadd(int x){
if (fa[x])
pushadd(fa[x]);
pushdown(x);
}
int wson(int x){
return son[fa[x]][1]==x;
}
void rotate(int x){
if (!fa[x])
return;
int y=fa[x],z=fa[y],L=wson(x),R=L^1;
if (z)
son[z][wson(y)]=x;
fa[x]=z,fa[y]=x,fa[son[x][R]]=y;
son[y][L]=son[x][R],son[x][R]=y;
pushup(y),pushup(x);
}
void splay(int x,int rt){
if (!x)
return;
if (!rt)
root=x;
pushadd(x);
for (int y=fa[x];fa[x];rotate(x),y=fa[x])
if (fa[y])
rotate(wson(x)==wson(y)?y:x);
}
void insert(int v,int &x,int pre){
pushdown(x);
if (x)
return insert(v,son[x][v>val[x]],x);
fa[x=++total]=pre,val[x]=v,size[x]=1;
splay(x,0);
}
int findkth(int x,int k){
pushdown(x);
if (size[son[x][1]]+1==k)
return x;
if (size[son[x][1]]>=k)
return findkth(son[x][1],k);
else
return findkth(son[x][0],k-size[son[x][1]]-1);
}
int findpre(int v,int rt){
if (!rt)
return 0;
pushdown(rt);
if (v>val[rt]){
int x=findpre(v,son[rt][1]);
return x?x:rt;
}
return findpre(v,son[rt][0]);
}
int findpre(int v){
int res=findpre(v,root);
splay(res,0);
return res;
}
int n,Min;
int main(){
scanf("%d%d",&n,&Min);
spt_clear();
int all=0,now=0;
for (int i=1;i<=n;i++){
char op[2];
int v;
scanf("%s%d",op,&v);
if (op[0]=='I'){
if (v<Min)
continue;
insert(v,root,0);
all++;
now++;
}
if (op[0]=='A')
pushson(root,v);
if (op[0]=='S'){
pushson(root,-v);
int wc=findpre(Min);
if (!wc)
continue;
int rt=root;
now-=size[son[rt][0]]+1;
fa[root=son[rt][1]]=0;
son[rt][1]=0;
}
if (op[0]=='F')
printf("%d\n",v>now?-1:val[findkth(root,v)]);
}
printf("%d",all-now);
return 0;
}

  

BZOJ1503 [NOI2004]郁闷的出纳员 splay的更多相关文章

  1. bzoj1503[NOI2004]郁闷的出纳员——Splay

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1503 好奇怪呀!为什么而TLE? 各种修改终于卡时过了.可是大家比我快多了呀?难道是因为自己 ...

  2. [BZOJ1503][NOI2004]郁闷的出纳员

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

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

    1503: [NOI2004]郁闷的出纳员 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作 ...

  4. [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...

  5. bzoj1503: [NOI2004]郁闷的出纳员(伸展树)

    1503: [NOI2004]郁闷的出纳员 题目:传送门 题解: 修改操作一共不超过100 直接暴力在伸展树上修改 代码: #include<cstdio> #include<cst ...

  6. bzoj1503 [NOI2004]郁闷的出纳员(名次树+懒惰标记)

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 8705  Solved: 3027[Submit][Statu ...

  7. NOI2004 郁闷的出纳员 Splay

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

  8. 【BZOJ1503】 [NOI2004]郁闷的出纳员 splay

    splay模板题,都快把我做忧郁了. 由于自己调两个坑点. 1.删除时及时updata 2.Kth 考虑k满足该点的条件即r->ch[1]->size+1<=k && ...

  9. BZOJ1503: [NOI2004]郁闷的出纳员(Splay)

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

随机推荐

  1. 转载:UML学习(一)-----用例图 (silent)

    原文:http://www.cnblogs.com/silent2012/archive/2011/09/07/2169518.html 1.什么是用例图 用例图源于Jacobson的OOSE方法,用 ...

  2. linux shell中 if else以及大于、小于、等于逻辑表达式

    在linux shell编程中,大多数情况下,可以使用测试命令来对条件进行测试,这里简单的介绍下,方便需要的朋友 比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示 ...

  3. mysql修改字段长度及pymysql.err.DataError: (1406, "Data too long for column 'name' at row 1")错误

    文章链接:修改字段:https://blog.csdn.net/xiejunna/article/details/78580682 错误分析:https://blog.csdn.net/qq_4214 ...

  4. 【JS】中ajax的URL中包含中文,后台接收乱码

    [问题]ajax提交get请求,url中参数包含中文,后台接收到显示乱码. [解决方案]前台: function getSiteInfoByName(siteName){ var res; $.aja ...

  5. 分布式Dubbo快速入门

    目录 Dubbo入门 背景 zookeeper安装 发布Dubbo服务 Dubbo Admin管理 消费Dubbo服务 抽取与依赖版本管理 Dubbo入门 Editor:SimpleWu Dubbo是 ...

  6. Metasploit one test

    1.对Metasploit的文件结构层次做一个目录结构图 2.漏洞利用的原理及其过程 攻击者发送一个附加攻击载荷的漏洞攻击代码给存在漏洞的系统.漏洞攻击代码首先执行,如果执行成功,攻击载荷中的实际代码 ...

  7. 直径上的乱搞 bzoj1999求树直径上的结点+单调队列,bzoj1912负权树求直径+求直径边

    直径上的乱搞一般要求出这条直径上的点集或者边集 bzoj1999:对直径上的点集进行操作 /* 给出一颗树,在树的直径上截取长度不超过s的路径 定义点u到s的距离为u到s的最短路径长度 定义s的偏心距 ...

  8. python基础复习

    复习-基础 一.review-base 其他语言吗和python的对比 c vs Python c语言是python的底层实现,解释器就是由python编写的. c语言开发的程序执行效率高,开发现率低 ...

  9. MVC开发中的常见错误-02-在应用程序配置文件中找不到名为“OAEntities”的连接字符串。

    在应用程序配置文件中找不到名为“OAEntities”的连接字符串. 分析原因:由于Model类是数据库实体模型,通过从数据库中引用的方式添加实体,所以会自动产生一个数据库连接字符串,而程序运行到此, ...

  10. POJ 2001 Shortest Prefixes(字典树活用)

    Shortest Prefixes Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21651   Accepted: 927 ...