[luogu1486][NOI2004]郁闷的出纳员
传送门
看到这题觉得是平衡树,因为有查找第k大和插入删除操作。
但是我不会平衡树啊……所以拿树状数组写了一个伪平衡树。
对于插入操作,直接插,但是要减掉一个rec值。这个rec是什么意思等下说。
对于删除操作,直接删就行了。
对于A,我们肯定不行把所有数字都加一遍,于是利用rec,使rec这个变量加上修改值。所以员工真正的工资 = 他们的值 + rec
对于S,同理。但是这里我们需要不断查询最小值,和工资标准比较,然后开始删。
对于查询操作,直接查第k大即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 600005
#define lowbit(x) (x&(-x))struct disc {long long temp[MAXN],num[MAXN];int tot,cnt;disc() : tot(0),cnt(0) {}void add(long long x) {temp[++cnt] = x;}void unique() {std::sort(temp+1,temp+1+cnt);temp[0] = -2147483647;for(int i=1;i<=cnt;++i) if(temp[i]!=temp[i-1]) num[++tot] = temp[i];}int sub(long long x) {int l = 1,r = tot;while(l<r) {int mid = (l+r+1)>>1;if(num[mid]>x) r = mid - 1;else l = mid;}return l;}}d;struct record {int num;char opt;
}R[MAXN];int C[MAXN];
int N,line,count = 0,ans = 0;
long long rec = 0;inline char get_opt() {char ch = getchar();while(ch!='I'&&ch!='A'&&ch!='S'&&ch!='F') ch = getchar();return ch;
}inline int read() {char ch = getchar(); int num = 0;while(ch>'9'||ch<'0') ch = getchar();while(ch>='0'&&ch<='9') num = num*10+ch-'0' , ch = getchar();return num;
}inline void update(int x,int u) {for(;x<=d.tot;x+=lowbit(x)) C[x] += u;
}inline int query(int x) {int ans = 0;for(;x>=1;x-=lowbit(x)) ans += C[x];return ans;
}inline int find_rk(int rk) {int cur = 0,tot = 0;for(int i=(1<<20);i>=1;i>>=1) {cur += i;if(cur>d.tot||tot+C[cur]>=rk) cur -= i;else tot += C[cur];}return cur + 1;
}inline void work() {while(count>0) {long long cur = d.num[ find_rk(1) ];if(cur + rec < line) {update( d.sub( cur ) , -1 );count --;ans ++;}else break;}
}int main() {N = read(); line = read(); for(int i=1;i<=N;++i) {R[i].opt = get_opt();R[i].num = read();if(R[i].opt=='I') d.add( R[i].num - rec );else if(R[i].opt=='A') rec += (long long)R[i].num;else if(R[i].opt=='S') rec -= (long long)R[i].num;}d.unique();rec = 0;for(int i=1;i<=N;++i) { if(R[i].opt=='I'&&R[i].num>=line) {count++;update(d.sub( R[i].num - rec ),1);}else if(R[i].opt=='A') rec += (long long)R[i].num;else if(R[i].opt=='S') {rec -= (long long)R[i].num;work();}else if(R[i].opt=='F'){if(R[i].num>count) puts("-1");else printf("%lld\n",d.num[find_rk(count - R[i].num + 1)] + rec);}}printf("%d",ans);return 0;
}
转载于:https://www.cnblogs.com/Neworld2002/p/10155251.html
[luogu1486][NOI2004]郁闷的出纳员相关推荐
- [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
- 洛谷P1486 [NOI2004] 郁闷的出纳员 题解
P1486 [NOI2004] 郁闷的出纳员 题目链接:P1486 [NOI2004] 郁闷的出纳员 题意:维护一个数据结构,支持 插入一个大小为 kkk 的值,小于下界时不插入 所有元素加上 kk ...
- bzoj1503: [NOI2004]郁闷的出纳员
地址:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 题目: 1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec ...
- BZOJ1503:[NOI2004]郁闷的出纳员——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1503 (题面复制的洛谷的,因为洛谷好看) 题目描述 OIER公司是一家大型专业化软件公司,有着数以万 ...
- [NOI2004]郁闷的出纳员
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经 ...
- BZOJ1503[NOI2004]郁闷的出纳员——treap
OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他心 ...
- [NOI2004]郁闷的出纳员 Treap
蒟蒻刚学旋转Treap,打个板子练练手. 题目描述 原题来自:NOI 2004 OIER 公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是 ...
- P1486 [NOI2004]郁闷的出纳员
题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...
- NOI2004 郁闷的出纳员
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- 洛谷 P1486 [NOI2004]郁闷的出纳员
题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...
最新文章
- 【SURF+GTM】基于SURF特征提取,GTM去除错误配准点的图像匹配算法的MATLAB仿真
- 简单介绍一下Java常用的五大框架!
- 新建sublime 的python代码文件时自动在头部增加几行常用代码
- BZOJ 3144 [Hnoi2013]切糕
- height:calc(100% - 10px)的用法(垂直居中) - 布局篇
- Ubuntu下编译运行C#——mono tools
- 用户故事与敏捷方法知识点梳理
- 元胞自动机概念与实例
- JAVA 面试 知识点整理
- 【深入PHP 面向对象】读书笔记(四) - 对象与设计
- 海底捞月战法实战讲解
- 女生从猫猫身上学到的.........||精品||
- 陌生单词-专业英语代码编码符号2
- 罗素的理发师和奥卡姆剃刀
- 华为机试第二题420 按照路径替换二叉树
- mc服务器语音,《我的世界》语音聊天Mod安装使用教程
- IEEE Trans. Multimedia投稿经历
- 为什么实际下载速度比宽带带宽小很多
- Tomcat vs Jetty vs Undertow性能对比
- 08 Halcon 3D点云体积计算
热门文章
- 拓端tecdat|R语言中的模拟过程和离散化:泊松过程和维纳过程
- 【大数据部落】出租车数据分析:用数据告诉你出租车资源配置是否合理
- mysql awr 上海用户组_AWR-mysql教程-PHP中文网
- SpringBoot 嵌入式web容器的启动原理
- 11、quiver(x,y,u,v)
- java自动推送百度收录_站点添加百度自动推送和360自动推送代码,让收录更快!...
- model.load_state_dict(checkpoint[‘state_dict‘]) KeyError: ‘state_dict‘
- Map集合常用方法总结
- attributeerror: __exit___利用__attribute__特性提高 APP 的鲁棒性
- kubernetes视频教程笔记 (20)-ingress