BZOJ[NOI2004]郁闷的出纳员 | Splay板子题
题目:
洛谷也能评测....还有我wa了10多次的记录233
题解:
不要想得太复杂,搞一个全局变量记录一下工资的改变量Delta,这样可以等询问的时候就输出val+Delta,然后插入的时候插入x-Delta
不要想会不会有员工工资一样,直接插入就好,这样省不少代码量.
对于降工资操作,插入一个min-Delta节点,ans+=左子树大小,右儿子作为新的根节点
直接走的员工不要算ans
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 200010
#define which(x) (ls[fa[(x)]]==x)
using namespace std;
int sz[N],ls[N],rs[N],val[N],fa[N],n,lim,k,tot,delta,ans,root;
char s[N];
void Pushup(int x){sz[x]=+sz[ls[x]]+sz[rs[x]];}
void Rotate(int u)
{
int v=fa[u],w=fa[v],b=which(u)?rs[u]:ls[u];
if (w) which(v)?ls[w]=u:rs[w]=u;
which(u)?(ls[v]=b,rs[u]=v):(rs[v]=b,ls[u]=v);
fa[u]=w,fa[v]=u;
if (b) fa[b]=v;
Pushup(v);Pushup(u);
}
void Splay(int u)
{
while (fa[u])
{
if (fa[fa[u]])
if (which(u)==which(fa[u])) Rotate(fa[u]);
else Rotate(u);
Rotate(u);
}
root=u;
}
void Insert(int x)
{
int cur=root,v=,dir;
while (cur)
{
if (val[v=cur]>=x) cur=ls[cur],dir=;
else cur=rs[cur],dir=;
sz[v]++;
}
val[++tot]=x,fa[tot]=v,sz[tot]=;
if (v) dir==?ls[v]=tot:rs[v]=tot;
Splay(tot);
}
int getkth(int k)
{
int cur=root;
while (cur)
{
if (sz[ls[cur]]>=k) cur=ls[cur];
else if (sz[ls[cur]]+>=k) return val[cur];
else k-=sz[ls[cur]]+,cur=rs[cur];
}
return val[cur];
}
void Delete()
{
Insert(lim-delta);
ans+=sz[ls[root]];
root=rs[root],fa[root]=;
}
int main()
{
scanf("%d%d",&n,&lim);
for (int i=;i<=n;i++)
{
scanf("%s%d",s+,&k);
if (s[]=='I')
if (k>=lim) Insert(k-delta);
if (s[]=='A') delta+=k;
if (s[]=='S') delta-=k,Delete();
if (s[]=='F')
if (sz[root]<k || root==) puts("-1");
else printf("%d\n",getkth(sz[root]-k+)+delta);
}
printf("%d",ans);
return ;
}
BZOJ[NOI2004]郁闷的出纳员 | Splay板子题的更多相关文章
- BZOJ 1503: [NOI2004]郁闷的出纳员 splay
1503: [NOI2004]郁闷的出纳员 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作 ...
- bzoj 1503郁闷的出纳员(splay)
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 11759 Solved: 4163[Submit][Stat ...
- 【BZOJ1503】 [NOI2004]郁闷的出纳员 splay
splay模板题,都快把我做忧郁了. 由于自己调两个坑点. 1.删除时及时updata 2.Kth 考虑k满足该点的条件即r->ch[1]->size+1<=k && ...
- NOI2004 郁闷的出纳员 Splay
郁闷的出纳员 [问题描述] OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常, ...
- BZOJ1503 [NOI2004]郁闷的出纳员 splay
原文链接http://www.cnblogs.com/zhouzhendong/p/8086240.html 题目传送门 - BZOJ1503 题意概括 如果某一个员工的工资低于了min,那么,他会立 ...
- 洛谷P1486 [NOI2004]郁闷的出纳员(splay)
题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...
- 洛谷.1486.[NOI2004]郁闷的出纳员(Splay)
题目链接 /* BZOJ1503: 3164kb 792ms/824ms(新建节点) 洛谷 : 3.06mb 320ms/308ms(前一个要慢wtf 其实都差不多,但前者好写) 四种操作: A:所有 ...
- bzoj1503[NOI2004]郁闷的出纳员——Splay
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1503 好奇怪呀!为什么而TLE? 各种修改终于卡时过了.可是大家比我快多了呀?难道是因为自己 ...
- BZOJ 1503: [NOI2004]郁闷的出纳员
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 10526 Solved: 3685[Submit][Stat ...
随机推荐
- 给网站添加icon图标
只需制成ico结尾的图片即可
- C#基础-面向对象-继承
继承 新建一个基类 对Person类3个字段进行重构->封装字段 效果如下: public string Name { get => name; set => name = valu ...
- [Ljava.lang.String; cannot be cast to java.lang.String报错的原因
完整错误信息: java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String 报这个错的原因 ...
- Windows Server 2012 搭建DHCP及远程路由访问
1.1 基础环境信息 1.2 DHCP与远程访问服务器角色安装 1.服务器管理器—>仪表板—>添加角色和功能,出现添加角色和功能向导,点击下一步 2.选择安装类型为基于角色或基 ...
- Apache Maven(二):构建生命周期
Maven 约定的目录结构 我要遵循Maven已经约定好的目录结构,才能让maven在自动构建过程中找到对应的资源进行构建处理.以下是maven约定的目录结构: 项目名称 |-- pom.xml :M ...
- python 一些基础知识
Python 注释的原理: 原理:根据对象的引用计数器,对象创建会给对象一个引用计数器属性.如果该属性的值为0,那么该对象会被释放.创建一个字符串对象,但是没有任何引用,计数器为0. Python小整 ...
- Python函数及参数
## 函数 - 函数是代码的一种组织形式,一般一个函数完成一个特定功能 - 函数需要先定义后使用 - 函数的定义 def func_name(参数): func_body ... return fun ...
- java实现 zip解压缩
程序实现了ZIP压缩.共分为2部分 : 压缩(compression)与解压(decompression) 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压. ...
- windows系统下用VScode配置远程编辑服务器文件的环境!通过Rmate方法
虽然公司电脑win可以通过Xshell通过SSH远程连接家中内网linux服务器了,但是只能用vim编辑文件有点不爽. 于是上网查询,windows下使用vscode远程编辑服务器文件的办法.参照博文 ...
- C语言进阶—— 单引号和双引号14
单引号和双引号 C语言中的单引号用来表示字符字面量 C语言中的双引号用来表示字符串字面量 ‘a’表示字符字面量,在内存中占用一个字节,'a'+1表示'a'的ASCII码加1,结果为'b' " ...