原文链接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. poll & select

    //todo /* * copied from http://devarea.com/linux-io-multiplexing-select-vs-poll-vs-epoll/#.W1GZ0vkzZ ...

  2. es2015箭头函数的this

    摘自https://www.cnblogs.com/chenxygx/p/6509564.html,谢谢博主的分享!

  3. webstorm2017.3最新激活教程(激活码、注册码)亲测成功

    1 前言 webstorm2017.3最新激活教程(旧版本可用,亲测成功,有疑问随时联系),20180411测试成功,还是注册机靠谱~ 2 下载地址 链接: https://pan.baidu.com ...

  4. mysql修改表、字段、库的字符集(转)

    原文链接:http://fatkun.com/2011/05/mysql-alter-charset.html MySQL中默认字符集的设置有四级:服务器级,数据库级,表级 .最终是字段级 的字符集设 ...

  5. numpy函数:[1]shape用法

    shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度.它的输入参数可以使一个整数表示维度,也可以是一个矩阵.

  6. 【MySql】delete用法

    delete 语句用于删除表中的数据, 基本用法为: delete from 表名称 where 删除条件; 以下是在表 students 中的实例: 删除 id 为 3 的行: delete fro ...

  7. JS实现图片放大查看

    示例:https://wumaozheng.com/static-pages/image-magnifier.html <!DOCTYPE html> <html> <h ...

  8. iOS运行时使用(动态添加方法)

    1 举例  我们实现一个Person类 然后Person 其实是没得对象方法eat:的 下面调用person的eat方法 程序是会奔溃的 那么需要借助运行时动态的添加方法 Person *p = [[ ...

  9. PHP 抽象类、接口,traint详解

    PHP底层实现(http://blog.jobbole.com/94475/) 一,抽象类:abstract abstract class HeHe{ public $age=18;//可以定义属性 ...

  10. LeetCode(111):二叉树的最小深度

    Easy! 题目描述: 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null ...