1503: [NOI2004]郁闷的出纳员 (SBT)
1503: [NOI2004]郁闷的出纳员
http://www.lydsy.com/JudgeOnline/problem.php?id=1503
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 4094 Solved: 1496
[Submit][Status]
Description
Input

Output
Sample Input
I 60
I 70
S 50
F 2
I 30
S 15
A 5
F 1
F 2
Sample Output
20
-1
2
HINT
I命令的条数不超过100000
A命令和S命令的总条数不超过100
F命令的条数不超过100000
每次工资调整的调整量不超过1000
新员工的工资不超过100000
Source
解析:
这是一道数据结构题,据说splay,AVL,SBT,Treap,线段树 ,树状数组等都可以实现
这两天刚学了SBT,虽然部分代码理解的还不是很透彻,但大致思想还是掌握了。。。
这里推荐两个学习SBT的地址:
讲解:http://www.nocow.cn/index.php/Size_Balanced_Tree
代码(包括SBT的九种操作):http://www.docin.com/p-481614045.html
这个链接也挺不错的:http://www.cnblogs.com/zhsl/p/3189901.html
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- using namespace std;
- const int N=;
- struct SBT{
- int l,r,sz,key;
- void init(){
- l=r=key=;
- sz=;
- }
- }tree[N];
- int root,tot;
- void go_left(int &rt){
- int k=tree[rt].r;
- tree[rt].r=tree[k].l;
- tree[k].l=rt;
- tree[k].sz=tree[rt].sz;
- tree[rt].sz=tree[tree[rt].l].sz+tree[tree[rt].r].sz+;
- rt=k;
- }
- void go_right(int &rt){
- int k=tree[rt].l;
- tree[rt].l=tree[k].r;
- tree[k].r=rt;
- tree[k].sz=tree[rt].sz;
- tree[rt].sz=tree[tree[rt].l].sz+tree[tree[rt].r].sz+;
- rt=k;
- }
- void maintain(int &rt,int flag){
- if(flag){
- if(tree[tree[tree[rt].r].r].sz>tree[tree[rt].l].sz)
- go_left(rt);
- else if(tree[tree[tree[rt].r].l].sz>tree[tree[rt].l].sz){
- go_right(tree[rt].r);
- go_left(rt);
- }else
- return ;
- }else{ //否则更新左子树
- if(tree[tree[tree[rt].l].l].sz>tree[tree[rt].r].sz)
- go_right(rt);
- else if(tree[tree[tree[rt].l].r].sz>tree[tree[rt].r].sz){
- go_left(tree[rt].l);
- go_right(rt);
- }else
- return ;
- }
- maintain(tree[rt].l,false);
- maintain(tree[rt].r,true);
- maintain(rt,false);
- maintain(rt,true);
- }
- void insert(int &rt,int k){
- if(rt==){
- rt=(++tot);
- tree[rt].init();
- tree[rt].key=k;
- }else{
- tree[rt].sz++;
- if(k<tree[rt].key)
- insert(tree[rt].l,k);
- else
- insert(tree[rt].r,k);
- maintain(rt,k>=tree[rt].key);
- }
- }
- void Delete(int &rt,int delay,int min_val){
- if(!rt)
- return ;
- if(tree[rt].key+delay<min_val){
- rt=tree[rt].r;
- Delete(rt,delay,min_val);
- }else{
- Delete(tree[rt].l,delay,min_val);
- tree[rt].sz=tree[tree[rt].l].sz+tree[tree[rt].r].sz+;
- }
- }
- int get_max_kth(int &rt,int k){
- int tmp=tree[tree[rt].r].sz+;
- if(tmp==k)
- return tree[rt].key;
- else if(tmp<k)
- return get_max_kth(tree[rt].l,k-tmp);
- return get_max_kth(tree[rt].r,k);
- }
- int main(){
- //freopen("input.txt","r",stdin);
- int n,min_val,delay;
- while(~scanf("%d%d",&n,&min_val)){
- tot=delay=root=;
- char op[];
- int x;
- while(n--){
- scanf("%s%d",op,&x);
- if(op[]=='I'){
- if(x<min_val)
- continue;
- insert(root,x-delay);
- }else if(op[]=='A')
- delay+=x;
- else if(op[]=='F')
- printf("%d\n",tree[root].sz<x?-:get_max_kth(root,x)+delay);
- else{
- delay-=x;
- Delete(root,delay,min_val);
- }
- }
- printf("%d\n",tot-tree[root].sz);
- }
- return ;
- }
1503: [NOI2004]郁闷的出纳员 (SBT)的更多相关文章
- bzoj 1503: [NOI2004]郁闷的出纳员 Treap
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 6263 Solved: 2190[Submit][Statu ...
- BZOJ 1503: [NOI2004]郁闷的出纳员
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 10526 Solved: 3685[Submit][Stat ...
- BZOJ 1503: [NOI2004]郁闷的出纳员 splay
1503: [NOI2004]郁闷的出纳员 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作 ...
- bzoj 1503: [NOI2004]郁闷的出纳员 -- 权值线段树
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
- (WA)BZOJ 1503: [NOI2004]郁闷的出纳员
二次联通门 : BZOJ 1503: [NOI2004]郁闷的出纳员 /* BZOJ 1503: [NOI2004]郁闷的出纳员 考虑这样一个事实 无论是加或减 都是针对全体人员的 那么只需要记录一个 ...
- 【BZOJ】1503: [NOI2004]郁闷的出纳员(Splay)
http://www.lydsy.com/JudgeOnline/problem.php?id=1503 这题没有看题解就1a了-好开心,, 其实后面去看题解发现他们的都很麻烦,其实有种很简单的做法: ...
- 1503. [NOI2004]郁闷的出纳员【平衡树-splay】
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经 ...
- 1503: [NOI2004]郁闷的出纳员
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 13723 Solved: 4989[Submit][Status][Discuss] Descripti ...
- bzoj1503 [NOI2004]郁闷的出纳员(名次树+懒惰标记)
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 8705 Solved: 3027[Submit][Statu ...
随机推荐
- [Spring boot] Autowired by name, by @Primary or by @Qualifier
In the example we have currently: @Component public class BinarySearchImpl { @Autowired private Sort ...
- [Git] Undo my last commit and split it into two separate ones
When you accidentally committed some changes to your branch you have various possibilities to “undo” ...
- ASP.NET MVC提交LIST列表到后台接收不到数据
兄跌 你看到这篇文章的时候已经找到答案了. 我在解决这个问题的端倪的时候已经浪费了我一个下午的休假时间.所以你应该给我一个赞!!! 不废话了上代码: Entity(Model) [Serializab ...
- C++ 纯虚方法
1.纯虚方法解决什么样的问题,为什么要设计出纯虚方法? 考虑下面的需求,基类声明了一个方法,这个方法只针对具体的子类才有意义,比如Animal的Eat()方法,调用Animal的Eat方法是没有意义的 ...
- oracle v$sqlarea 分析SQL语句使用资源情况 确认是否绑定变量
-如何确定系统中是否存在绑定变量的情况:首先创建一个表,用于存放整理过得数据:create table t1 as select sql_text from v$sqlarea;----V$SQLAR ...
- yii源码三 -- db
<AR> CActiveRecord:path:/framework/db/ar/CActiveRecord.phpoverview:is the base class for class ...
- 今天发现一个神奇的网站Greasy Fork
Greasy Fork这个网站的神奇之处在于,提供了各路大神编写的脚本,可以在浏览器中实现各种神奇的功能,比如这个: 我下载使用了,确实好用,什么腾讯视频vip,爱奇艺视频vip,统统可以观看~ 并且 ...
- bash和shell的关系
bash是borne again shell的缩写,它是shell的一种,Linux上默认采用的是bash. shell脚本中的方法带不带function的区别,例如: function foo () ...
- 在linux下makefile的使用
在linux下makefile的使用
- npm 主要命令
本文主要参考自:http://www.runoob.com/nodejs/nodejs-npm.html 1.使用 npm 命令安装模块 $ npm install express var expre ...