bzoj 1503: [NOI2004]郁闷的出纳员 (splay)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1503
题面:
1503: [NOI2004]郁闷的出纳员
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 14257 Solved: 5253
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
I 60
I 70
S 50
F 2
I 30
S 15
A 5
F 1
F 2
Sample Output
20
-1
2
#include<bits/stdc++.h> using namespace std; const int M = 2e5+10; const int inf = 0x3f3f3f; int n,m,sz,rt,mn,add; int c[M][2],fa[M],tag[M],v[M],siz[M];inline void pushup(int k){int l = c[k][0],r = c[k][1];siz[k] = siz[l] + siz[r] + 1; }void rotate(int x,int &k){int y = fa[x],z = fa[y],l,r;if(c[y][0] == x) l = 0;else l = 1;r = l^1;if(y == k) k = x;else {if(c[z][0]==y) c[z][0]=x;else c[z][1] = x;}fa[x] = z;fa[y] = x;fa[c[x][r]]=y;c[y][l]=c[x][r]; c[x][r]=y;pushup(y); pushup(x); }void splay(int x,int &k){while(x != k){int y = fa[x],z = fa[y];if(y != k){if(c[y][0]==x^c[z][0]==y)rotate(x,k);else rotate(y,k);}rotate(x,k);} }inline int Find(int k,int rk){int l = c[k][0],r = c[k][1];if(siz[r] + 1 == rk) return v[k];else if(siz[r] >= rk) return Find(r,rk);else return Find(l,rk-siz[r]-1); }inline void ins(int &k,int val,int last){if(k == 0){k = ++sz;v[k] = val;siz[k] = 1;fa[k] = last;return ;}if(val < v[k]) ins(c[k][0],val,k);else ins(c[k][1],val,k);pushup(k); }inline int del(int &k,int last){if(k == 0) return 0;int ret = 0;if(v[k] + add < mn){ret = 1 + siz[c[k][0]] + del(c[k][1],last);siz[c[k][1]] = siz[k] - ret;k = c[k][1];fa[k] = last;}else{ret = del(c[k][0],k);siz[k] = siz[k] - ret;}return ret; }int main() {ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);string op;int x;add = 0;cin>>n>>mn;int ans = 0;for(int i = 1;i <= n;i ++){cin>>op>>x;if(op[0] == 'I'&&x >= mn) ins(rt,x-add,0),splay(sz,rt);else if(op[0] == 'S') add -= x,ans += del(rt,0);else if(op[0] == 'A') add += x;else if(op[0] == 'F'){if(siz[rt] < x) cout<<-1<<endl;else cout<<Find(rt,x)+add<<endl;}}cout<<ans<<endl;return 0; }
转载于:https://www.cnblogs.com/kls123/p/10712137.html
bzoj 1503: [NOI2004]郁闷的出纳员 (splay)相关推荐
- BZOJ 1503: [NOI2004]郁闷的出纳员 Treap
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- [BZOJ]1503: [NOI2004]郁闷的出纳员
SB平衡树 #include<cstdio> #define MN 100000 #define L(x) c[x][0] #define R(x) c[x][1] #define rtf ...
- BZOJ 1503 [NOI2004] 郁闷的出纳员 treap
题意: 链接 方法: treap 解析: 这是本蒟蒻的第二道treap题,第二遍写的时候update,左旋右旋,插入函数都可以大概写出来了(还是得练啊),然而del 函数却被虐了,自己也想到用个什么 ...
- [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
- bzoj1503: [NOI2004]郁闷的出纳员
地址:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 题目: 1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec ...
- 洛谷P1486 [NOI2004] 郁闷的出纳员 题解
P1486 [NOI2004] 郁闷的出纳员 题目链接:P1486 [NOI2004] 郁闷的出纳员 题意:维护一个数据结构,支持 插入一个大小为 kkk 的值,小于下界时不插入 所有元素加上 kk ...
- HYSBZ - 1503 郁闷的出纳员(Splay)
题目链接:点击查看 题目大意:中文题 题目分析:利用Splay加一点思维还是比较容易解决的,对于所有员工加工资以及减工资的操作,别看只有100次,如果是暴力修改的话,时间复杂度能达到1e7,常数稍大点 ...
- 【题解】 bzoj1503: [NOI2004]郁闷的出纳员 (Splay)
bzoj1503,懒得复制,戳我戳我 Solution: 我知不知道我是那根筋抽了突然来做splay,调了起码\(3h+\),到第二天才改出来(我好菜啊),当做训练调错吧 一个裸的splay,没啥好说 ...
- BZOJ1503:[NOI2004]郁闷的出纳员——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1503 (题面复制的洛谷的,因为洛谷好看) 题目描述 OIER公司是一家大型专业化软件公司,有着数以万 ...
- BZOJ1503 [NOI2004]郁闷的出纳员
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 [我的感受] 这题郁闷了很久,因为discuss里讨论的问题和我都不是一个问题... ...
最新文章
- linux系统怎么用vim,linux/unix
- dji大疆机器人冬令营_2019RoboMaster高中生机器人冬令营火热进行中
- QT绘制带有数据源的图表
- springboot 和 mybatis整合:参数查询和动态sql
- MySQL datediff()函数
- 北京航空航天大学计算机科学与工程系,北航郑征主页 北京航空航天大学教师个人主页系统...
- springboot 微服务_使用 Docker 部署 Spring Boot微服务
- 杜绝网上压根没测过就乱写之 《oracle mybatis 返回自增主键 》
- LVS+ldirector实现负载均衡
- 终于有一次,排名没有进步
- 【实验室乱记】从 0 开始的 STM32L0 的 Gps WiFi 蓝牙模块物联网开发
- 电源完整性之Cadence Sigrity Power DC_电热协同仿真
- 是时候让打字更“快舒”了-小鹤双拼
- 使用wps-excell画折线图
- centos安装git时出错提示make[1]: *** [perl.mak] Error 2 make: *** [perl/perl.mak] Error 2
- GAN (Generative Adversarial Nets 生成对抗网络)
- 电信业Hadoop应用分析
- 2022跨考华中科技大学计算机学院学硕上岸经验分享
- MYSQL 更改初始 ROOT 密码
- 欧盟GDPR通用数据保护条例-原文