BZOJ1503 [NOI2004]郁闷的出纳员 splay
原文链接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的更多相关文章
- bzoj1503[NOI2004]郁闷的出纳员——Splay
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1503 好奇怪呀!为什么而TLE? 各种修改终于卡时过了.可是大家比我快多了呀?难道是因为自己 ...
- [BZOJ1503][NOI2004]郁闷的出纳员
[BZOJ1503][NOI2004]郁闷的出纳员 试题描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是 ...
- BZOJ 1503: [NOI2004]郁闷的出纳员 splay
1503: [NOI2004]郁闷的出纳员 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作 ...
- [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
- bzoj1503: [NOI2004]郁闷的出纳员(伸展树)
1503: [NOI2004]郁闷的出纳员 题目:传送门 题解: 修改操作一共不超过100 直接暴力在伸展树上修改 代码: #include<cstdio> #include<cst ...
- bzoj1503 [NOI2004]郁闷的出纳员(名次树+懒惰标记)
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 8705 Solved: 3027[Submit][Statu ...
- NOI2004 郁闷的出纳员 Splay
郁闷的出纳员 [问题描述] OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常, ...
- 【BZOJ1503】 [NOI2004]郁闷的出纳员 splay
splay模板题,都快把我做忧郁了. 由于自己调两个坑点. 1.删除时及时updata 2.Kth 考虑k满足该点的条件即r->ch[1]->size+1<=k && ...
- BZOJ1503: [NOI2004]郁闷的出纳员(Splay)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经 ...
随机推荐
- 数据库-mysql-DDL-表记录操作
- 腾讯云部署keepalived高可用
使用背景: 通过调用python SDK在腾讯云手动部署keepalived高可用 部署环境 系统:centos7.3 Master:192.168.0.100 Slave:192.168.0.14 ...
- python----动态规划
不能放弃治疗,每天都要进步!! 什么时候使用动态规划呢? 1. 求一个问题的最优解 2. 大问题可以分解为子问题,子问题还有重叠的更小的子问题 3. 整体问题最优解取决于子问题的最优解(状态转移方程) ...
- XmlDocument.Load(url) url是https远程时,报错" 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。" "根据验证过程,远程证书无效。"
XmlDocument.Load(url) url是https远程时,报错" 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系." "根据验证过程, ...
- 处理ftp服务器 在重启后ftp客户端不能连接访问的问题
1:环境:centos7 2:当在重启centos7 linux服务器后,再连接ftp客户端不能链接 此时需要检查以下几点: 2-1:核查ftp服务是否启动正常: [root@localhost ~] ...
- Confluence 6 附件存储文件系统的分级
从 Confluence 3.0 开始,附件的存储方式有了重大的改变和升级.如果你是从 Confluence 2.10 及其早期版本升级上来的,请参考 Upgrading Confluence 页面中 ...
- (六)STL仿函数functor
1.仿函数为算法服务,特点是重载操作符() 2.一共分为3大类,包括算术类,逻辑运算类,相对关系(比较大小):都继承了binary_function 3.仿函数的一些调用示例,其中右边的仿函数没有继承 ...
- Django项目的创建及基本使用
安装步骤 Django是Python进行Web开发的框架,目前应用比较广泛.使用python进行Web开发,能够很快的搭建所需的项目,可以运用于原型开发,也可以部署到实际的应用环境. 使用Django ...
- java多线程快速入门(二十一)
CountDownLatch(闭锁)计数器 有一个任务A,它要等待其他4个任务执行完毕之后才执行,此时就可以利用CountDownLatch来实现这种功能 package com.cppdy; imp ...
- 《剑指offer》 包含min函数的栈
本题来自<剑指offer> 包含min函数的栈 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 思路: 举例子让抽象问题具体 ...