刷题总结——郁闷的出纳员(bzoj1503)
题目:
题目背景
NOI2004 DAY1 T1
题目描述
OIER 公司是一家大型专业化软件公司,有着数以万计的员工。作为一名出纳员,我的任务之一便是统计每位员工的工资。这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资。如果他心情好,就可能把每位员工的工资加上一个相同的量。反之,如果心情不好,就可能把他们的工资扣除一个相同的量。我真不知道除了调工资他还做什么其它事情。
工资的频繁调整很让员工反感,尤其是集体扣除工资的时候,一旦某位员工发现自己的工资已经低于了合同规定的工资下界,他就会立刻气愤地离开公司,并且再也不会回来了。每位员工的工资下界都是统一规定的。每当一个人离开公司,我就要从电脑中把他的工资档案删去,同样,每当公司招聘了一位新员工,我就得为他新建一个工资档案。
老板经常到我这边来询问工资情况,他并不问具体某位员工的工资情况,而是问现在工资第 k 多的员工拿多少工资。每当这时,我就不得不对数万个员工进行一次漫长的排序,然后告诉他答案。
好了,现在你已经对我的工作了解不少了。正如你猜的那样,我想请你编一个工资统计程序。怎么样,不是很困难吧?
输入格式
第一行有两个非负整数 n 和 min 。n 表示下面有多少条命令,min 表示工资下界。
接下来的 n 行,每行表示一条命令。命令可以是以下四种之一:
aaarticlea/png;base64,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" alt="" />
“下划线( _ )”表示一个空格,I 命令、A 命令、S 命令中的 k 是一个非负整数,F 命令中的 k 是一个正整数。
在初始时,可以认为公司里一个员工也没有。
输出格式
输出的行数为 F 命令的条数加一。
对于每条 F 命令,你的程序要输出一行,仅包含一个整数,为当前工资第 k 多的员工所拿的工资数,如果 k 大于目前员工的数目,则输出 -1 。
输出的最后一行包含一个整数,为离开公司的员工的总数。
样例数据 1
备注
【数据范围】
I 命令的条数不超过 100000
A 命令和 S 命令的总条数不超过 100
F 命令的条数不超过 100000
每次工资调整的调整量不超过 1000
新员工的工资不超过 100000
【评分方法】
对于每个测试点,如果你输出文件的行数不正确,或者输出文件中含有非法字符,得分为 0 。
否则你的得分按如下方法计算:
- 如果对于所有的 F 命令,你都输出了正确的答案,并且最后输出的离开公司的人数也是正确的,你将得到 10 分;
- 如果你只对所有的 F 命令输出了正确答案,得 6 分;
- 如果只有离开公司的人数是正确的,得 4 分;否则得 0 分。
题解:
重要的事情先说下:
仔细审题!!!!!
做的时候以为加入公司就走的员工是要算入总数的·····结果tm不算·····感觉题目也没说清楚啊···
其余的就是splay的基本操作了···另外这道题有个很巧妙的地方是记录一个sum维护修改公司的总和,并根据sum不是直接修改所有员工的工资数,而是修改加入的人的工资数和每次判断离开公司的人时修改minn(具体看代码)····,这样就能节约复杂度了···
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int N=3e5+;
int val[N],father[N],cnt[N],son[N][],size[N],root,tot;
int n,a,minn,totl=,sum=;
long long totcut=;
char s[];
inline int R()
{
char c;int f=;
for(c=getchar();c<''||c>'';c=getchar());
for(;c<=''&&c>='';c=getchar())
f=(f<<)+(f<<)+c-'';
return f;
}
inline void clear(int now)
{
size[now]=son[now][]=son[now][]=val[now]=cnt[now]=father[now]=;
}
inline void update(int now)
{
if(now)
{
size[now]=cnt[now];
if(son[now][]) size[now]+=size[son[now][]];
if(son[now][]) size[now]+=size[son[now][]];
}
}
inline int get(int a)
{
return son[father[a]][]==a;
}
inline void rotate(int now)
{
int fa=father[now],ofa=father[fa],which=get(now);
son[fa][which]=son[now][which^],father[son[fa][which]]=fa;
son[now][which^]=fa,father[fa]=now,father[now]=ofa;
if(ofa) son[ofa][son[ofa][]==fa]=now;
update(fa),update(now);
}
inline void splay(int now)
{
while(father[now])
{
if(father[father[now]]) rotate(get(now)==get(father[now])?father[now]:now);
rotate(now);
}
root=now;
}
inline void insert(int x)
{
int now=root,last=;
while(true)
{
if(!now)
{
now=++tot;size[now]=cnt[now]=;father[now]=last;val[now]=x;
son[last][val[now]>val[last]]=now;update(last);splay(now);
break;
}
if(val[now]==x)
{
cnt[now]++;update(now);update(last);splay(now);
break;
}
last=now;now=son[now][x>val[now]];
}
}
inline int findx(int x)
{
int now=root;
while(true)
{
if(x<=size[son[now][]]) now=son[now][];
else
{
int temp=size[son[now][]]+cnt[now];
if(x<=temp) return val[now];
x-=temp;now=son[now][];
}
}
}
inline int Delete()
{
int temp=size[son[root][]]+cnt[root];int oldroot=root;
root=son[oldroot][];father[root]=;
clear(oldroot);
return temp;
}
int main()
{
//freopen("a.in","r",stdin);
n=R(),minn=R();
while(n--)
{
scanf("%s%d",s,&a);
if(s[]=='I')
{
if(a-sum>(minn-sum-))
insert(a-sum),totl++;
}
if(s[]=='A')
sum+=a;
if(s[]=='S')
sum-=a;
if(s[]=='F')
{
if(totl<a) cout<<"-1"<<endl;
else
{
int ans=findx(totl-a+);
cout<<ans+sum<<endl;
}
}
int limit=minn-sum-;insert(limit);
int temp=Delete();
totcut+=(long long)(temp-);
totl=totl-temp+;
}
cout<<totcut<<endl;
return ;
}
刷题总结——郁闷的出纳员(bzoj1503)的更多相关文章
- [BZOJ1503][NOI2004]郁闷的出纳员
[BZOJ1503][NOI2004]郁闷的出纳员 试题描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是 ...
- bzoj1503 [NOI2004]郁闷的出纳员(名次树+懒惰标记)
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 8705 Solved: 3027[Submit][Statu ...
- [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
- 【bzoj1503】[NOI2004]郁闷的出纳员
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 13890 Solved: 5086[Submit][Stat ...
- bzoj1503: [NOI2004]郁闷的出纳员(伸展树)
1503: [NOI2004]郁闷的出纳员 题目:传送门 题解: 修改操作一共不超过100 直接暴力在伸展树上修改 代码: #include<cstdio> #include<cst ...
- 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】郁闷的出纳员
Splay Splay的模板题吧……妥妥的序列操作= =(好像有段时间没写过这种纯数据结构题了……) /************************************************ ...
- ZOJ 刷题记录 (。・ω・)ノ゙(Progress:31/50)
[热烈庆祝ZOJ回归] P1002:简单的DFS #include <cstdio> #include <cstring> #include <algorithm> ...
随机推荐
- rm和mv和dirname和查看文件的命令
rm -f -i -r ############################ mv -f -i -u 比较新旧 ########################### basename 获取文 ...
- IOS之constraints
anyway, you can do this with auto layout. You can do it entirely in IB as of Xcode 5.1. Let's start ...
- STL:string类中size()与length()的区别
结论是:两者没有任何区别 解释: C++Reference中对于两者的解释: 两者的具体解释都一模一样: 理解: length是因为C语言的习惯而保留下来的,string类最初只有length,引进S ...
- win10搭建Java环境
一.下载地址 jdk和jre官方网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 根据你的系统选择你需要 ...
- What is the difference between try/except and assert?
assert only check if a condition is true or not and throw an exception. A try/except block can run a ...
- Paxos算法与Zookeeper分析,zab (zk)raft协议(etcd) 8. 与Galera及MySQL Group replication的比较
mit 分布式论文集 https://github.com/feixiao/Distributed-Systems wiki上描述的几种都明白了就出师了 raft 和 zab 是类似的,都是1.先选举 ...
- 关于JS的继承总结
最近都在巩固JS的基础知识,今天组要看的是有关继承方面的,每次看都会加深自己的理解呢 1.借助构造函数实现继承 原理:在子类中改变父类this的指向 function Parent1() { this ...
- 【计算机网络】Session机制
1. Http请求中Session机制 先简单说一下HTTP请求中的Session机制:Session数据保存在服务器端,SessionID保存在客户端的Cookies中(关闭浏览器时过期).当客户端 ...
- 无法连接Elasticsearch解决方案
前言 最近还是在弄ELK,并且在测试Logstash从kafka消费日志(最后输出到Elasticsearch). 测试完毕后,在kibana中,并没有发现Elasticsearch中的数据. 后来装 ...
- Linux基础学习-chrony时间同步服务
Chrony时间同步 NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议.它的用于是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可 ...