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

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

/**************************************************************
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. 【MVC4升级到MVC5】ASP.Net MVC 4项目升级MVC 5的方法

    1.备份你的项目 2.从Web API升级到Web API 2,修改global.asax,将 ? 1 WebApiConfig.Register(GlobalConfiguration.Config ...

  2. str.substring(beginIndex,endIndex)-008

    // 将字符串str前n位放在后面,返回新的字符串 public String headToTail(String str,int n){ if(n==0){ System.out.println(s ...

  3. 在Ubuntu系统下编译arcsim仿真器

    首先,用tar zxvf arcsim-0.2.1.tar.gz 将软件包解压 然后,打开里面的INSTALL文件,按照里面的步骤一步一步安装库.Ubuntu13.04下 1.BLAS sudo ap ...

  4. 2018 杭电多校1 - Chiaki Sequence Revisited

    题目链接 Problem Description Chiaki is interested in an infinite sequence $$$a_1,a_2,a_3,...,$$$ which i ...

  5. 【bzoj4550】小奇的博弈 博弈论+dp

    题目描述 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色.最左边是白色棋子,最右边 是黑色棋子,相邻的棋子颜色不同.   小奇可以移动白色棋子,提比可以移动黑色的棋子, ...

  6. BZOJ3864 & HDU4899:Hero meet devil——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3864 http://acm.hdu.edu.cn/showproblem.php?pid=4899 ...

  7. [Leetcode] Maximum depth of binary tree二叉树的最大深度

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  8. 【套题】qbxt国庆刷题班D1

    Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...

  9. JavaScript非阻塞加载脚本

    As more and more sites evolve into “Web 2.0″ apps, the amount of JavaScript increases. This is a per ...

  10. 一种高效的寻路算法 - B*寻路算法

    在此把这个算法称作B* 寻路算法(Branch Star 分支寻路算法,且与A*对应),本算法适用于游戏中怪物的自动寻路,其效率远远超过A*算法,经过测试,效率是普通A*算法的几十上百倍. 通过引入该 ...