传送门: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. sql server2008 R2 各个版本的区别与选择

    目前已知的SQL Server 2008 R2的版本有: 企业版.标准版.工作组版.Web版.开发者版.Express版.Compact 3.5版. 这个次序也是各个版本功能的强大程度从高到低的一个排 ...

  2. Eclipse luna 装不上 veloeclipse

    今天在Eclipse中始终无法安装veloeclipse ,报错:Failed to prepare partial IU: [R]com.googlecode.veloeclipse.ui 2.0. ...

  3. kill mediaserver脚本

    #!/bin/bash adb shell kill $(adb shell ps | grep mediaserver | awk '{print $2}') adb shell pm clear ...

  4. VS code - code Snippet

    For anyone working on the UI and using VS Code, you can create a user Snippet and keyboard shortcut ...

  5. MIUI应用权限设置

    不管你认为我写的好坏都能够在以下评论告诉我,你的支持是我继续写下去的动力,谢谢. 随着miui越来越封闭,小米对非自由渠道的应用限制越来越苛刻.我们公司的产品一半以上的用户都是来自小米,并且像我们这种 ...

  6. 在CentOS上把Nginx从1.2.4升级到1.6.0

    在CentOS上升级把Nginx从1.2.4升级到1.6.0 摘要:本文记录了在CentOS 6.3上,把Nginx从1.2.4升级到1.6.0的过程. 1. 概述 在我做的一个项目中,最近我对生产服 ...

  7. elasticsearch_初始篇

    一.elasticsearch简单介绍 Elasticsearch 是一个基于Lucene的分布式.可扩展.近实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的数据以搜索.分析和探索的能力. 实时 ...

  8. 注入式开发(二):.NET 匿名函数

    其实匿名函数就是个委托.只不过写起来更简洁. 为啥要用匿名函数呢?只是为了装逼吗? 诺诺诺 比如说,我们写代码,写着写着,发现有2个函数非常相像: string methodA(string data ...

  9. 暴走吧!Snapdragon SDK开发速成指南

    (文/Aurora J) Qualcomm的Snapdragon处理器.它快如闪电.效率极高.擅长挑战多任务极限,而且拥有攻城狮们梦寐以求的无限潜能.它能确保您的手机集4G LTE.极速体验.长久续航 ...

  10. swift中的@objc的作用

    转载:https://www.jianshu.com/p/6c5b45d9d042 自动清除冗余代码减小包大小 得益于 Swift 的静态语言特性,每个函数的调用在编译期间就可以确定.因此在编译完成后 ...