Code:

#include<cstdio>
#include<algorithm>
using namespace std;
struct Node{
int s,val,tag,v;
Node *ch[2];
Node(int u){
s=1,val=1,tag=0,v=u;
ch[0]=ch[1]=NULL;
}
int cmp(int x,int ty){
if(ty==0){
if(x<v)return 0;if(x==v)return -1;return 1;
}
else{
int lsize=ch[0]==NULL?0:ch[0]->s;
if(x<=lsize)return 0;if(x<=lsize+val)return -1;return 1;
}
}
int ls(){if(ch[0]==NULL)return 0;return ch[0]->s;}
void maintain(){
s=val;
if(ch[0]!=NULL)s+=ch[0]->s;
if(ch[1]!=NULL)s+=ch[1]->s;
}
void push_down(){
if(tag!=0){
if(ch[0]!=NULL)ch[0]->tag+=tag;
if(ch[1]!=NULL)ch[1]->tag+=tag;
v+=tag,tag=0;
}
}
};
void rotate(Node* &o,int d){
Node *k=o->ch[d^1];o->ch[d^1]=k->ch[d];k->ch[d]=o;
o->maintain();k->maintain();o=k;
}
void splay(Node* &o,int x,int ty){
o->push_down();
int d=o->cmp(x,ty);
if(ty==1&&d==1)x-=o->ls()+o->val;
if(d!=-1){
Node *p=o->ch[d];
p->push_down();
int d2=p->cmp(x,ty);
if(ty==1&&d2==1)x-=p->ls()+p->val;
if(d2!=-1){
splay(p->ch[d2],x,ty);
if(d==d2)
rotate(o,d^1);
else
rotate(o->ch[d],d2^1);
}
rotate(o,d^1);
}
}
void insert(Node* &o,int x){
if(o==NULL){
o=new Node(x);return;
}
o->push_down();
int d=o->cmp(x,0);
if(d==-1){
++(o->val);++(o->s);return;
}
insert(o->ch[d],x);
o->maintain();
}
int minn;
void qianqu(Node *o,int k){
if(o==NULL)return;
o->push_down();
int d=o->cmp(k,0);
if(d<1)
qianqu(o->ch[0],k);
else{
minn=max(minn,o->v);
qianqu(o->ch[1],k);
}
}
Node *head;
int main()
{
int n,minv,cnt_leave=0;
scanf("%d%d",&n,&minv);
for(int i=1;i<=n;++i)
{
char A[4];int k;
scanf("%s",A);scanf("%d",&k);
if(A[0]=='I'){
if(k>=minv){
insert(head,k);
splay(head,k,0);
}
//else ++cnt_leave;
}
if(A[0]=='A'&&head!=NULL)head->tag+=k;
if(A[0]=='S'&&head!=NULL){
head->tag-=k;minn=-1000000;
qianqu(head,minv);
if(minn!=-1000000){
splay(head,minn,0);
cnt_leave+=head->ls()+head->val;
if(head->ch[1]!=NULL)head=head->ch[1];
else head=NULL;
}
}
if(A[0]=='F'){
int tot=head==NULL?0:head->s;
if(k>tot)printf("-1\n");
else{
splay(head,tot-k+1,1);
printf("%d\n",head->v);
}
}
}
printf("%d\n",cnt_leave);
return 0;
}

洛谷P1486 [NOI2004]郁闷的出纳员的更多相关文章

  1. 洛谷P1486 [NOI2004]郁闷的出纳员 [STL,平衡树]

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

  2. 洛谷 P1486 [NOI2004]郁闷的出纳员【Treap】题解+AC代码

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

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

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

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

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

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

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

  6. 【洛谷P1486】郁闷的出纳员

    题目大意:维护一个平衡树,支持插入一个数,删除小于一个值的所有数,K 大值查询,每个节点权值加减一个数. 题解:所有节点权值加减操作可以考虑直接维护一个全局标记,删除小于一个值的所有数字为一个二分的过 ...

  7. P1486 [NOI2004]郁闷的出纳员

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

  8. Luogu P1486 [NOI2004]郁闷的出纳员(平衡树)

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

  9. 洛谷$P$1486 郁闷的出纳员 $[NOI2004]$ $splay$

    正解:$splay$ 解题报告: 传送门! 依然先考虑要呲呲些什么操作鸭$QwQ$ 其实就只要一个删除区间,一个查询第$k$大,还一个插入就欧克? 删除区间的话直接旋转下根什么的然后直接把子树删了就好 ...

随机推荐

  1. 2.3 SVN在myeclipse中的使用

    一.将svn插件文件夹复制到myeclipse的dropins目录下,并重启myeclipse 二.从SVN中检查项目到myeclipse  2.打开myeclipse,点击window的show v ...

  2. reset清除所有浏览器默认样式

    温馨提示 reset 的目的不是清除浏览器的默认样式, 这仅是部分工作. 清除和重置是紧密不可分的.reset 的目的不是让默认样式在所有浏览器下一致, 而是减少默认样式有可能带来的问题.reset ...

  3. 转载 - 最短路&差分约束题集

    出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548    A strange lift基础最短路(或bfs)★ ...

  4. 0912MySQL 执行计划explain详解

    转自http://blog.itpub.net/29773961/viewspace-1767044/ 该博客内容是比较全的,虽然写的比较晦涩,多读几遍还是不错的 explain命令是查看查询优化器如 ...

  5. 0208如何利用federated配置远程的数据库和本地数据相互交互

    -- 第一步修改本地数据库的配置文件,让其支持federated存储引擎,在[mysqld]配置文件下面增加federated[注意不能写成大写]-- federated -- 第二步创建一个数据库, ...

  6. Spring MVC-静态页面示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_static_pages.htm 说明:示例基于Spring MVC 4.1.6. ...

  7. Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

    Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容 当Git无法自动合并分支时,就必须首先解 ...

  8. jQuery学习之开篇

    吐槽 近期比較烦,对于一个前端白痴来说,工作方向突然转向前端这块着实让人蛋疼无比.前段时间简单的学习了下EasyUI,算是对其有一个简单的认知了吧.EasyUI的研究过程中发现,假设没有掌握JS.JQ ...

  9. fputs与fgets

    1.      fputs 函数名: fputs  功  能: 送一个字符到一个流中  用  法: int fputs(char *string, FILE *stream); 说明: fputs是一 ...

  10. 改你MB需求!

    改你MB需求! 原创 2015-12-08 尖峰视界 尖峰视界 我敏锐的觉察到,产品经理的头像開始闪动了.在0.1秒的时间内,我全身的血液都冲向了大脑.果然.右上角弹出了文件传输窗体. "最 ...