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 ...
随机推荐
- 转 Js 跨域CORS报错 Response for preflight has invalid HTTP status code 405
转自:http://www.cnblogs.com/SilenceTom/p/6697484.html 调用接口遇到Response for preflight has invalid HTTP st ...
- winform 删除,清空指定文件夹上的所有文件或文件夹
//递归删除文件夹及子文件C#代码: public void DeleteFolder(string dir) { if (Directory.Exists(dir)) //如果存在这个文件夹删除之 ...
- parse_str — 将字符串解析成多个变量
$arr2="first=value1&second=value2&third[]=value3&third[]=value4"; parse_str($a ...
- cacti添加多个tomcat监控(多端口)
1.修改tomcat的模版 Data Input Methods->Tomcat Status 把原本固定的端口,用户名和密码手动修改成变量(绿线标出的),之后save保存之后,再在Input ...
- matlab 中try/catch语句
try的作用是让Matlab尝试执行一些语句,执行过程中如果出错,则执行catch部分的语句,其语法: try (command1)组命令1总被执行,错误时跳出此结构 catch (command2) ...
- BZOJ 1452 Count(二维树状数组)
大水题. 建立100个二维树状数组,总复杂度就是O(qlognlogm). # include <cstdio> # include <cstring> # include & ...
- 转:Lucene之计算相似度模型VSM(Vector Space Model) : tf-idf与交叉熵关系,cos余弦相似度
原文:http://blog.csdn.net/zhangbinfly/article/details/7734118 最近想学习下Lucene ,以前运行的Demo就感觉很神奇,什么原理呢,尤其是查 ...
- CentOS 访问控制列表(tcp wrappers)
1.TCP Wrappers是一个工作在应用层的安全工具,它只能针对某些具体的应用或者服务起到一定的防护作用.比如说ssh.telnet.FTP等服务的请求,都会先受到TCP Wrappers的拦截. ...
- [洛谷P1341]无序字母对
题目大意:给一张无向图,找一条字典序最小的欧拉路径 题解:若图不连通或有两个以上的奇数点,则没有欧拉路径,可以$dfs$,在回溯时把这个节点加入答案 卡点:没有在回溯时加入答案,导致出现了欧拉路径没走 ...
- React Patterns
Contents Stateless function JSX spread attributes Destructuring arguments Conditional rendering Chil ...