我们可以用一颗平衡树维护每个人的工资,因为工资的变化会影响到后面所有的人,所以我们打一个标签,向平衡树里插入的时候减去这个标签的值,这样代表改变了之后的零点,,这样维护这个标签就好了,输出的时候要加上这个标签。

  反思:]后面打了个|,查了半天。。

/**************************************************************
Problem: 1503
User: BLADEVIL
Language: C++
Result: Accepted
Time:676 ms
Memory:3932 kb
****************************************************************/ //By BLADEVIL
#include <cstdio>
#define maxn 200010 using namespace std; int t,tot,ans,mm;
int t_left[maxn],t_right[maxn],t_size[maxn],t_key[maxn]; void right_rotate(int &t){
int k=t_left[t];
t_left[t]=t_right[k];
t_right[k]=t;
t_size[k]=t_size[t];
t_size[t]=t_size[t_right[t]]+t_size[t_left[t]]+;
t=k;
} void left_rotate(int &t){
int k=t_right[t];
t_right[t]=t_left[k];
t_left[k]=t;
t_size[k]=t_size[t];
t_size[t]=t_size[t_left[t]]+t_size[t_right[t]]+;
t=k;
} void maintain(int &t,bool flag){
if (!flag) {
if (t_size[t_left[t_left[t]]]>t_size[t_right[t]])
right_rotate(t); else
if (t_size[t_right[t_left[t]]]>t_size[t_right[t]])
left_rotate(t_left[t]),right_rotate(t); else return;
} else {
if (t_size[t_right[t_right[t]]]>t_size[t_left[t]])
left_rotate(t); else
if (t_size[t_left[t_right[t]]]>t_size[t_left[t]])
right_rotate(t_right[t]),left_rotate(t); else return;
}
maintain(t_left[t],); maintain(t_right[t],);
maintain(t,); maintain(t,);
} void t_insert(int &t,int v){
if (!t) {
t=++tot;
t_left[t]=t_right[t]=;
t_size[t]=;
t_key[t]=v;
} else {
t_size[t]++;
if (v<t_key[t]) t_insert(t_left[t],v); else t_insert(t_right[t],v);
maintain(t,v>=t_key[t]);
}
} int t_rank(int &t,int k){
if (k==t_size[t_right[t]]+) return t_key[t];
if (k<t_size[t_right[t]]+)
return t_rank(t_right[t],k); else return t_rank(t_left[t],k-t_size[t_right[t]]-);
} int t_clear(int &t,int v){
if (!t) return ;
int sum=,tmp=;
if (t_key[t]<v) {
sum=t_size[t_left[t]]+;
t_left[t]=;
t_size[t]-=sum;
tmp=t_clear(t_right[t],v);
sum+=tmp;
t_size[t]-=tmp;
t_size[t_right[t]]=t_size[t];
t=t_right[t];
} else {
sum=t_clear(t_left[t],v);
t_size[t]-=sum;
}
return sum;
} int main(){
//freopen("2.out","w",stdout);
int n,m,k;
scanf("%d%d",&n,&m);
while (n--){
char c[];
scanf("%s%d",&c,&k);
if (c[]=='I') {if (k>=m) t_insert(t,k-mm);} else
if (c[]=='F') if (k>t_size[t]) printf("-1\n"); else printf("%d\n",t_rank(t,k)+mm); else
if (c[]=='A') mm+=k; else mm-=k,ans+=t_clear(t,m-mm);
//printf("|%d\n",sum);
//printf("|%d %d\n",m,mm);
}
printf("%d\n",ans);
return ;
}

bzoj 1503 平衡树的更多相关文章

  1. (WA)BZOJ 1503: [NOI2004]郁闷的出纳员

    二次联通门 : BZOJ 1503: [NOI2004]郁闷的出纳员 /* BZOJ 1503: [NOI2004]郁闷的出纳员 考虑这样一个事实 无论是加或减 都是针对全体人员的 那么只需要记录一个 ...

  2. [BZOJ 1503]郁闷的出纳员(fhq treap)

    [BZOJ 1503]郁闷的出纳员 题面 第一行有两个非负整数n和min.n表示下面有多少条命令,min表示工资下界. 接下来的n行,每行表示一条命令.命令可以是以下四种之一: 名称 格式 作用 I命 ...

  3. [bzoj 1503][NOI 2004]郁闷的出纳员(平衡树)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 分析: 经典的平衡树题,我用Treap做的 下面有几点注意的: 1.可能出现新加入的人的 ...

  4. BZOJ 1503 郁闷的出纳员(平衡树)(NOI 2004)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作 ...

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

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 10526  Solved: 3685[Submit][Stat ...

  6. BZOJ 1503 郁闷的出纳员

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

  7. bzoj 1503: [NOI2004]郁闷的出纳员 -- 权值线段树

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...

  8. 洛谷 1486/BZOJ 1503 郁闷的出纳员

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 13866  Solved: 5069[Submit][Stat ...

  9. bzoj 1503郁闷的出纳员(splay)

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 11759  Solved: 4163[Submit][Stat ...

随机推荐

  1. fuck the browser mode

    使用了source insight 4有一段时间了,今天用着突然发现我的鼠标移动到变量.函数.自定义的类型上时,单击鼠标左键直接就跳到了定义处,很像是按住了Ctrl再单击鼠标,用得极其不舒服,开始怀疑 ...

  2. 3dContactPointAnnotationTool开发日志(三)

      今天的目的是把obj文件导到场景里.具体将制定路径的obj文件导进去我用的是这个方法.导进去后呈现的是一个黑色的影子.   导入后还想实现一下缩放功能,请看这个方法.缩放实现起来也很简单.   光 ...

  3. CentOS 7 开放防火墙端口

    我:最近在使 CentOS 7时发现在本地不能访问linux上8080端口,以上是我的操作,修改后访问成功 CentOS 7 开放防火墙端口 命令 最近公司新的server要求用CentOS7, 发现 ...

  4. idea快捷键操作

    在编写代码的时候直接输入psv就会看到一个psvm的提示,此时点击tab键一个main方法就写好了. psvm 也就是public static void main的首字母. 依次还有在方法体内键入f ...

  5. 网络控制API 路由表 arp表 包括tcp的这些参数都是从哪里设置

    路由表查看 arp缓存 都是走的什么接口?

  6. html5 js canvas中画星星的函数

    function drawStar(cxt, x, y, outerR, innerR, rot) { cxt.beginPath(); ; i < ; i++) { cxt.lineTo(Ma ...

  7. httpservlet在创建实例对象时候默认调用有参数的init方法 destroy()方法 service方法, 父类的init方法给子类实例一个config对象

  8. BZOJ4737 组合数问题(卢卡斯定理+数位dp)

    不妨不管j<=i的限制.由卢卡斯定理,C(i,j) mod k=0相当于k进制下存在某位上j大于i.容易想到数位dp,即设f[x][0/1][0/1][0/1]为到第x位时是否有某位上j> ...

  9. P1120 小木棍 [数据加强版](poj 1011)

    题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度,编 ...

  10. 【以前的空间】BZOJ2733[HNOI2012]永无乡

    启发式合并?! 似乎当时写并查集的时候就有看到过类似于把小并查集并到大并查集上的说法,原来这就是启发式…… 具体做法就是把小树里面的一个个拿出来,然后加到大树里面去(裸的不敢相信) const max ...