传送门

看到这题觉得是平衡树,因为有查找第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]郁闷的出纳员相关推荐

  1. [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...

  2. 洛谷P1486 [NOI2004] 郁闷的出纳员 题解

    P1486 [NOI2004] 郁闷的出纳员 题目链接:P1486 [NOI2004] 郁闷的出纳员 题意:维护一个数据结构,支持 插入一个大小为 kkk​ 的值,小于下界时不插入 所有元素加上 kk ...

  3. bzoj1503: [NOI2004]郁闷的出纳员

    地址:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 题目: 1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  ...

  4. BZOJ1503:[NOI2004]郁闷的出纳员——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1503 (题面复制的洛谷的,因为洛谷好看) 题目描述 OIER公司是一家大型专业化软件公司,有着数以万 ...

  5. [NOI2004]郁闷的出纳员

    Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经 ...

  6. BZOJ1503[NOI2004]郁闷的出纳员——treap

    OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他心 ...

  7. [NOI2004]郁闷的出纳员 Treap

    蒟蒻刚学旋转Treap,打个板子练练手. 题目描述 原题来自:NOI 2004 OIER 公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是 ...

  8. P1486 [NOI2004]郁闷的出纳员

    题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...

  9. NOI2004 郁闷的出纳员

    Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...

  10. 洛谷 P1486 [NOI2004]郁闷的出纳员

    题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...

最新文章

  1. 【SURF+GTM】基于SURF特征提取,GTM去除错误配准点的图像匹配算法的MATLAB仿真
  2. 简单介绍一下Java常用的五大框架!
  3. 新建sublime 的python代码文件时自动在头部增加几行常用代码
  4. BZOJ 3144 [Hnoi2013]切糕
  5. height:calc(100% - 10px)的用法(垂直居中) - 布局篇
  6. Ubuntu下编译运行C#——mono tools
  7. 用户故事与敏捷方法知识点梳理
  8. 元胞自动机概念与实例
  9. JAVA 面试 知识点整理
  10. 【深入PHP 面向对象】读书笔记(四) - 对象与设计
  11. 海底捞月战法实战讲解
  12. 女生从猫猫身上学到的.........||精品||
  13. 陌生单词-专业英语代码编码符号2
  14. 罗素的理发师和奥卡姆剃刀
  15. 华为机试第二题420 按照路径替换二叉树
  16. mc服务器语音,《我的世界》语音聊天Mod安装使用教程
  17. IEEE Trans. Multimedia投稿经历
  18. 为什么实际下载速度比宽带带宽小很多
  19. Tomcat vs Jetty vs Undertow性能对比
  20. 08 Halcon 3D点云体积计算

热门文章

  1. 拓端tecdat|R语言中的模拟过程和离散化:泊松过程和维纳过程
  2. 【大数据部落】出租车数据分析:用数据告诉你出租车资源配置是否合理
  3. mysql awr 上海用户组_AWR-mysql教程-PHP中文网
  4. SpringBoot 嵌入式web容器的启动原理
  5. 11、quiver(x,y,u,v)
  6. java自动推送百度收录_站点添加百度自动推送和360自动推送代码,让收录更快!...
  7. model.load_state_dict(checkpoint[‘state_dict‘]) KeyError: ‘state_dict‘
  8. Map集合常用方法总结
  9. attributeerror: __exit___利用__attribute__特性提高 APP 的鲁棒性
  10. kubernetes视频教程笔记 (20)-ingress