传送门: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. POJ3255 Roadblocks 【次短路】

    Roadblocks Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7760   Accepted: 2848 Descri ...

  2. java File_encoding属性

    今天给客户发版本号,突然发现报表导出内容为空,大小0字节.感到很奇怪,由于开发的时候都好好的,打包出来怎么会出现异常. 细看才后发现是 file_encoding这个java系统属性编码方式设置导致的 ...

  3. 湘潭邀请赛——Alice and Bob

    Alice and Bob Accepted : 133   Submit : 268 Time Limit : 1000 MS   Memory Limit : 65536 KB  Problem ...

  4. 开源 java CMS - FreeCMS2.2 敏感词管理

    项目地址:http://www.freeteam.cn/ 敏感词管理 管理敏感词.系统会自己主动将敏感词替换为指定字符. 系统进行敏感词处理的功能有: 信息:标题.内容,摘要. 栏目:名称,描写叙述. ...

  5. serverSpeed是一个android手机端到服务器间udp/tcp对比测速软件

    https://github.com/eltld/serverSpeed https://github.com/c-wind/serverSpeed https://github.com/PeterK ...

  6. Xsolla和Hi-Rez工作室联手推行SMITE

    视频游戏店面管理和计费解决方式的领导者,Xsolla.将重拳出击将与Hi-Rez游戏工作室合作.该工作室是一家美国的独立游戏开发商,主要开发MOBA游戏-SMITE. 支持全球600多种支付方式 Xs ...

  7. IO流(SequenceInputStream序列流--文件拆分与合并)

    一.文件拆分 1.将一个文件按照规定的大小进行分割成多个文件并将被分割详细信息保存至配置信息中 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载,属性列表 ...

  8. html页面内锚点定位及跳转方法总结

    1.最简单的方法是锚点用<a>标签,在href属性中写入DIV的id.如下: <!DOCTYPE html><html><head><style& ...

  9. git 如何让单个文件回退到指定的版本【转】

    本文转载自:http://blog.csdn.net/ikscher/article/details/43851643 1.进入到文件所在文件目录,或者能找到文件的路径查看文件的修改记录 1 $ gi ...

  10. HDU1045 Fire Net —— 二分图最大匹配

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)  ...