bzoj 1503 平衡树
我们可以用一颗平衡树维护每个人的工资,因为工资的变化会影响到后面所有的人,所以我们打一个标签,向平衡树里插入的时候减去这个标签的值,这样代表改变了之后的零点,,这样维护这个标签就好了,输出的时候要加上这个标签。
反思:]后面打了个|,查了半天。。
/**************************************************************
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 平衡树的更多相关文章
- (WA)BZOJ 1503: [NOI2004]郁闷的出纳员
二次联通门 : BZOJ 1503: [NOI2004]郁闷的出纳员 /* BZOJ 1503: [NOI2004]郁闷的出纳员 考虑这样一个事实 无论是加或减 都是针对全体人员的 那么只需要记录一个 ...
- [BZOJ 1503]郁闷的出纳员(fhq treap)
[BZOJ 1503]郁闷的出纳员 题面 第一行有两个非负整数n和min.n表示下面有多少条命令,min表示工资下界. 接下来的n行,每行表示一条命令.命令可以是以下四种之一: 名称 格式 作用 I命 ...
- [bzoj 1503][NOI 2004]郁闷的出纳员(平衡树)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 分析: 经典的平衡树题,我用Treap做的 下面有几点注意的: 1.可能出现新加入的人的 ...
- BZOJ 1503 郁闷的出纳员(平衡树)(NOI 2004)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作 ...
- BZOJ 1503: [NOI2004]郁闷的出纳员
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 10526 Solved: 3685[Submit][Stat ...
- BZOJ 1503 郁闷的出纳员
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- bzoj 1503: [NOI2004]郁闷的出纳员 -- 权值线段树
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
- 洛谷 1486/BZOJ 1503 郁闷的出纳员
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 13866 Solved: 5069[Submit][Stat ...
- bzoj 1503郁闷的出纳员(splay)
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 11759 Solved: 4163[Submit][Stat ...
随机推荐
- 【MVC4升级到MVC5】ASP.Net MVC 4项目升级MVC 5的方法
1.备份你的项目 2.从Web API升级到Web API 2,修改global.asax,将 ? 1 WebApiConfig.Register(GlobalConfiguration.Config ...
- str.substring(beginIndex,endIndex)-008
// 将字符串str前n位放在后面,返回新的字符串 public String headToTail(String str,int n){ if(n==0){ System.out.println(s ...
- 在Ubuntu系统下编译arcsim仿真器
首先,用tar zxvf arcsim-0.2.1.tar.gz 将软件包解压 然后,打开里面的INSTALL文件,按照里面的步骤一步一步安装库.Ubuntu13.04下 1.BLAS sudo ap ...
- 2018 杭电多校1 - Chiaki Sequence Revisited
题目链接 Problem Description Chiaki is interested in an infinite sequence $$$a_1,a_2,a_3,...,$$$ which i ...
- 【bzoj4550】小奇的博弈 博弈论+dp
题目描述 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色.最左边是白色棋子,最右边 是黑色棋子,相邻的棋子颜色不同. 小奇可以移动白色棋子,提比可以移动黑色的棋子, ...
- BZOJ3864 & HDU4899:Hero meet devil——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3864 http://acm.hdu.edu.cn/showproblem.php?pid=4899 ...
- [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 ...
- 【套题】qbxt国庆刷题班D1
Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...
- JavaScript非阻塞加载脚本
As more and more sites evolve into “Web 2.0″ apps, the amount of JavaScript increases. This is a per ...
- 一种高效的寻路算法 - B*寻路算法
在此把这个算法称作B* 寻路算法(Branch Star 分支寻路算法,且与A*对应),本算法适用于游戏中怪物的自动寻路,其效率远远超过A*算法,经过测试,效率是普通A*算法的几十上百倍. 通过引入该 ...