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 ...
随机推荐
- 在mysql启用远程连接
1.在ubuntu下面安装mysql. apt-get install mysql-server mysql-client -y 2.修改/etc/mysql/my.cnf文件. #bind-addr ...
- IIS发布 MVC 配置
E:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll
- 【bzoj1672】[USACO2005 Dec]Cleaning Shifts 清理牛棚 dp/线段树
题目描述 Farmer John's cows, pampered since birth, have reached new heights of fastidiousness. They now ...
- C# 利用FTP自动下载xml文件后利用 FileSystemWatcher 监控目录下文件变化并自动更新数据库
using FtpLib; using System; using System.Collections.Generic; using System.ComponentModel; using Sys ...
- BZOJ4823 CQOI2017老C的方块(最小割)
如果将其转化为一个更一般的问题即二分图带权最小单边点覆盖(最小控制集)感觉是非常npc的.考虑原题给的一大堆东西究竟有什么奇怪的性质. 容易发现如果与特殊边相邻的两格子都放了方块,并且这两个格子都各有 ...
- hadoop 使用Avro求最大值
在上例中:hadoop MapReduce辅助排序解析,为了求每年的最大数据使用了mapreduce辅助排序的方法. 本例中介绍利用Avro这个序列化框架的mapreduce功能来实现求取最大值.Av ...
- POJ.1287 Networking (Prim)
POJ.1287 Networking (Prim) 题意分析 可能有重边,注意选择最小的边. 编号依旧从1开始. 直接跑prim即可. 代码总览 #include <cstdio> #i ...
- 差点AFO
差点就AFO了,小伙伴们一定注意护眼啊. 眼睛总算是活过来了. 还有一个月联赛,加油
- 警惕!Unity3D中UnityEngine.Object的一个小陷阱
先看看如下C#的脚本代码: 猜猜控制台打出来的是什么? In the bool parameter function, value info is: True 肯定出乎很多人的意料吧? transf ...
- Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题解
Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题目链接:https://codeforces.com/contest/1130 ...