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. Bootstrap 表单控件一(单行输入框input,下拉选择框select ,文本域textarea)

    单行输入框,常见的文本输入框,也就是input的type属性值为text.在Bootstrap中使用input时也必须添加type类型,如果没有指定type类型,将无法得到正确的样式,因为Bootst ...

  2. Request中通过文件流获取文件

    第一次写博客,希望能帮到以后接触到这里的同学,废话不多说,面对疾风吧. /** * 获取文件相信信息 * @param request HttpServletRequest实例 * @param im ...

  3. Firefox配置Fiddler

    Fiddler: Toos->Telerik Fiddler Options->HTTPS->Capture HTTPS CONNECTs Toos->Telerik Fidd ...

  4. elasticsearch 权威指南聚合阅读笔记(七)

    count(1) select clssId,count(1) from student group by  classId { "size":0, "aggs" ...

  5. orcale 基本查询(1)

    orcale 基本查询 查询当前用户下的所有表:  select * from tab; 查询表结构: desc 表名设置行宽: set linesize 120;设置列宽: 数值类型: col 列名 ...

  6. git 强制pull

    git fetch --all git reset --hard origin/master git pull

  7. iOS8 tableView的Cell高度自适应开发

    1.在- (void)viewDidLoad中设置: //估计高度为81 self.tableView.estimatedRowHeight = 81.0f; //自适应高度 self.tableVi ...

  8. 安装eclipse maven插件m2eclipse No repository found containing

    m2eclipse插件是Eclipse的一款Maven插件. 安装m2eclipse插件的步骤例如以下: 启动Eclipse,在菜单条中选择Help,然后选择Install New Software- ...

  9. Linux之convert命令【转】

    本文转载自:http://zlb1986.iteye.com/blog/778054 转载: 强大的convert命令 convert命令可以用来转换图像的格式,支持JPG, BMP, PCX, GI ...

  10. 国外物联网平台初探(四):Ayla Networks

    定位 Ayla企业软件解决方案为全球部署互联产品提供强大的工具 功能 Ayla的IoT平台包含3个主要组成部分: (1) Ayla嵌入式代理Ayla Embedded Agents (2) Ayla云 ...