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 ...
随机推荐
- js实现二分查找
二分查找需要数组是有序的,1.先从有序数组的最中间元素开始查找,如果和要查找的元素相等,直接返回索引,若不相等则下一步.2.如果指定的元素大于或者小于中间元素,则在大于或小于的那一半区域内查找,重复第 ...
- 没有CTO的Netflix有哪些值得我们学习的工程文化?
作者介绍: 杨波,拍拍贷基础框架研发总监.具有超过 10 年的互联网分布式系统研发和架构经验,曾先后就职于:eBay 中国研发中心(eBay CDC),任资深研发工程师,参与亿贝开放 API 平台研发 ...
- 《JSON笔记之二》----封装JSONUtil
许多java开发人员对于fastjson再也熟悉不过了,这是alibaba开源的依赖,使用fastjson可以使我们很容易的把请求json串转换成为我们所需要的对象.list.map等对象格式,对于开 ...
- php学习【2】
1:运算符 <?php $x=1; echo 1+1;//算术运算符 echo $x+=5;//赋值运算符 echo "<br/>"; echo $x++; ec ...
- 关于IT人的一些消遣区
https://www.csdn.net/http://www.51cto.com/http://bestcbooks.com/http://www.jobbole.com/http://www.co ...
- 第1章 HTML5 概述
第 1 章 HTML5 概述 学习要点: 1.HTML5 的历史 2.HTML5 的功能 3.HTML5 的特点 4.课程学习问题 HTML5 是继 HTML4.01 和 XHTML1.0 之后的超 ...
- PHP 日期处理函数 date() 、mktime()
一.前言 php是世界上最好的语言! 二.介绍 mktime()函数获取当周\当天\当月 /** * 微程-日期工具函数 week: 当周 day: 当天 month: 当月 * @author 狗蛋 ...
- OC中block作方法参数时的用法
方式一.在传参时直接声明block回调方法. 1. 定义方法: - (int)doTest:(NSString *)name para1:(int)temp1 para2:(int)temp2 suc ...
- POJ 2217 LCS(后缀数组)
Secretary Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1655 Accepted: 671 Descript ...
- 14、函数之匿名函数(lambda)
关键字lambda可以创建匿名函数,语法是:lambda 参数s :表达式.匿名函数与普通函数只有以下几点不同:①没有函数名:②只能有一个表达式:③一定会有返回值,返回值就是该表达式的结果. 另外,匿 ...