传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1503

由于初始工资未达到下限而离开的员工不算在离开人数之内。。。坑爹。。。

然后就是写kth的时候,忘记考虑当前节点的值有可能出现了不止一次。。。

#include <cstdio>

const int maxn = 100005;

int n, min_salary, zengL, root, cnt = 1, t1, leave;
int ch[maxn][2], fa[maxn], siz[maxn], key[maxn], tm[maxn];
char opr; inline void pushup(int x) {
siz[x] = siz[ch[x][0]] + siz[ch[x][1]] + tm[x];
}
inline void rotate(int x) {
int y = fa[x];
if (y == ch[fa[y]][0]) {
ch[fa[y]][0] = x;
}
else {
ch[fa[y]][1] = x;
}
fa[x] = fa[y];
int dir = x == ch[y][1];
ch[y][dir] = ch[x][dir ^ 1];
fa[ch[x][dir ^ 1]] = y;
ch[x][dir ^ 1] = y;
fa[y] = x;
pushup(y);
pushup(x);
}
inline void splay(int x) {
int p;
char flag1, flag2;
while (fa[x]) {
p = fa[x];
if (!fa[p]) {
rotate(x);
}
else {
flag1 = p == ch[fa[p]][1];
flag2 = x == ch[p][1];
if (flag1 ^ flag2) {
rotate(x);
}
else {
rotate(p);
}
rotate(x);
}
}
root = x;
}
inline int houji(int val) {
int rt = 0, x = root;
while (x && val != key[x] + zengL) {
if (val < key[x] + zengL) {
rt = x;
x = ch[x][0];
}
else {
x = ch[x][1];
}
}
return x? x: rt;
}
bool ist(int x, int val, int p, int dir) {
if (!x) {
++cnt;
key[cnt] = val - zengL;
tm[cnt] = 1;
siz[cnt] = 1;
fa[cnt] = p;
ch[p][dir] = cnt;
return true;
}
if (val == key[x] + zengL) {
++tm[x];
++siz[x];
return false;
}
int d = val > key[x] + zengL;
bool rt = ist(ch[x][d], val, x, d);
pushup(x);
return rt;
}
inline int kth(int k) {
int x = root;
while (k > siz[ch[x][1]] + tm[x] || k <= siz[ch[x][1]]) {
if (k > siz[ch[x][1]] + tm[x]) {
k -= siz[ch[x][1]] + tm[x];
x = ch[x][0];
}
else {
x = ch[x][1];
}
}
return key[x] + zengL;
} int main(void) {
//freopen("in.txt", "r", stdin);
scanf("%d%d", &n, &min_salary);
key[1] = 2000000000;
siz[1] = 1;
tm[1] = 1;
root = 1;
while (n--) {
while ((opr = getchar()) < 'A');
scanf("%d", &t1);
if (opr == 'I') {
if (t1 >= min_salary && ist(root, t1, 0, 0)) {
splay(cnt);
}
}
else if (opr == 'A' || opr == 'S') {
zengL += (opr == 'A'? t1: -t1);
splay(houji(min_salary));
leave += siz[ch[root][0]];
ch[root][0] = 0;
pushup(root);
}
else {
printf("%d\n", t1 > siz[root] - 1? -1: kth(t1 + 1));
}
}
printf("%d\n", leave);
return 0;
}

  

_bzoj1503 [NOI2004]郁闷的出纳员【Splay】的更多相关文章

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

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

  2. NOI2004 郁闷的出纳员 Splay

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

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

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

  4. 洛谷P1486 [NOI2004]郁闷的出纳员(splay)

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

  5. BZOJ1503 [NOI2004]郁闷的出纳员 splay

    原文链接http://www.cnblogs.com/zhouzhendong/p/8086240.html 题目传送门 - BZOJ1503 题意概括 如果某一个员工的工资低于了min,那么,他会立 ...

  6. 洛谷.1486.[NOI2004]郁闷的出纳员(Splay)

    题目链接 /* BZOJ1503: 3164kb 792ms/824ms(新建节点) 洛谷 : 3.06mb 320ms/308ms(前一个要慢wtf 其实都差不多,但前者好写) 四种操作: A:所有 ...

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

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

  8. BZOJ[NOI2004]郁闷的出纳员 | Splay板子题

    题目: 洛谷也能评测....还有我wa了10多次的记录233 题解: 不要想得太复杂,搞一个全局变量记录一下工资的改变量Delta,这样可以等询问的时候就输出val+Delta,然后插入的时候插入x- ...

  9. BZOJ_1503 [NOI2004]郁闷的出纳员 【Splay树】

    一 题面 [NOI2004]郁闷的出纳员 二 分析 模板题. 对于全部员工的涨工资和跌工资,可以设一个变量存储起来,然后在进行删除时,利用伸展树能把结点旋转到根的特性,能够很方便的删除那些不符合值的点 ...

随机推荐

  1. Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自己主动填入功能结合实例)

    用户注冊或者找回password时通常会用到短信验证功能.这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注冊用户.获取SD ...

  2. 新浪微博发送消息和授权机制原理(WeiboSDK)

    1.首先是在微博发送消息,对于刚開始做weibo发送消息的刚開始学习的人会有一个误区,那就是会觉得须要授权后才干够发送消息.事实上发送消息仅仅须要几行代码就能够实现了,很easy,不须要先授权再发送消 ...

  3. AnkhSVN介绍

    AnkhSVN介绍 Posted on 2012-11-15 23:24 ArRan 阅读(3120) 评论(1) 编辑 收藏 AnkhSVN是一款在VS中管理Subversion的插件,您可以在VS ...

  4. [iOS]经常使用正則表達式

    经常使用正則表達式大全!(比如:匹配中文.匹配html) 匹配中文字符的正則表達式: [u4e00-u9fa5]    评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包含汉字 ...

  5. 连接虚拟机的SQLServer

    1.IP可以互相PING通 2.Telnet发现端口没有放开,防火墙新建入账规则开放端口 成功..

  6. java8--IO工具类(java疯狂讲义3复习笔记)

    Paths类 public static void pathTest(){ Path path = Paths.get("~"); System.out.println(path) ...

  7. Error CREATEing SolrCore 'new_core': Unable to create core [new_core] Caused by: Can't find resource 'solrconfig.xml' in classpath or 'D:\solr\solr-7.2.1\server\solr\new_core'

    \solr-7.2.1\server\solr\configsets\_default  下的conf  复制到:   \solr-7.2.1\server\solr\new_core

  8. anaconda tensorflow tflearn 自动安装脚本 anaconda使用-b可以非交互式安装

    install_dir=/usr/local/anaconda3 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )&qu ...

  9. lucene segment会包含所有的索引文件,如tim tip等,可以认为是mini的独立索引

    A Lucene index segment can be viewed as a "mini" index or a shard. Each segment is a colle ...

  10. windows系统修改mysql端口的方法

    1.首先在控制面板--管理工具--服务里停止mysql服务