HYSBZ 1503 郁闷的出纳员 伸展树
题目链接: https://vjudge.net/problem/26193/origin
题目描述: 中文题面.......
解题思路: 伸展树, 需要伸展树的模板, 突然发现自己昨天看到的模板不是太好, 现在又新找了一个, 很简练, 自己将模板的实现从头到尾看了一遍, 觉得数组实现的实在是非常的巧妙, 然后自己照着敲了一遍, 边敲边看, 崩掉了.....肯定是哪里手残了, 没有必要浪费时间去改了, 有那时间不如看点别的
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <string> #include <vector> #include <limits> #include <algorithm>using namespace std;typedef long long LL;const int Max = 100010;const int INF = 0x3f3f3f3f;struct SplayTree {int num[Max],pre[Max],next[Max][2],key[Max];int root,Size;void PushUp(int x) //向上更新,计算以自己为根节点的树中节点的个数 {num[x] = num[next[x][0]] + num[next[x][1]]+1;}void Rotate(int x,int kind)//伸展操作 {int y = pre[x];int z = pre[y];next[y][!kind] = next[x][kind];pre[next[x][kind]] = y;next[z][next[z][1]==y] = x;pre[x] = z;next[x][kind] = y;pre[y] = x;PushUp(y);PushUp(x);}void Splay(int x,int goal){if(x!=goal){while(pre[x]!=goal){if(next[pre[x]][0] == x){Rotate(x,1);}else Rotate(x,0);}}if(!goal) root = x;}void NewNode(int &x,int y,int val){x = ++Size;num[x] = 1;pre[x] = y;next[x][0] = next[x][1] = 0;key[x] = val;next[y][val>key[y]] = x;}void Insert(int val)//插入节点 {int x,y;for(x = root,y = 0;x;x = next[x][val>key[x]]){y = x;num[x]++;}NewNode(x,y,val);Splay(x,0);}int Search(int val) //查询比小于等于val的节点的位置 {int res,x;for(res = 0, x = root;x;x = next[x][val>key[x]]){if(key[x] >= val && key[res] >= key[x]){res = x;}}return res;}int Select(int k)//查找第k大。 {int x = root;k = num[root]-k;for(x = root; num[next[x][0]]+1!=k;){if(num[next[x][0]]+1<k){k -= num[next[x][0]]+1;x = next[x][1];}else x = next[x][0];}Splay(x,0);return key[x];}void Init(){root = Size = 0;num[0] = next[0][0] = next[0][1] = pre[0] ;key[0] = INF;Insert(INF);} }Tr;int main() {int q,Mi,diff,ans,data;char op[2];while(~scanf("%d %d",&q,&Mi)){Tr.Init();diff = ans = 0;while(q--){scanf("%s %d",op,&data);if(op[0] == 'I'){if(data >= Mi){Tr.Insert(data-Mi+diff);}}else if(op[0] == 'A'){diff-=data;}else if(op[0] == 'S'){diff += data;Tr.Splay(Tr.Search(diff),0);ans+=Tr.num[Tr.next[Tr.root][0]];Tr.num[Tr.root] -= Tr.num[Tr.next[Tr.root][0]];Tr.next[Tr.root][0] = 0;}else{if(data>=Tr.num[Tr.root]){printf("-1\n");}else{printf("%d\n",Tr.Select(data)+Mi-diff);}}}printf("%d\n",ans);}return 0; }
View Code
思考: 自己数据结构的知识是真的需要好好的加强, 然后自己应该照着组合数学的题单搞一搞了
转载于:https://www.cnblogs.com/FriskyPuppy/p/7553970.html
HYSBZ 1503 郁闷的出纳员 伸展树相关推荐
- HYSBZ - 1503 郁闷的出纳员(Splay)
题目链接:点击查看 题目大意:中文题 题目分析:利用Splay加一点思维还是比较容易解决的,对于所有员工加工资以及减工资的操作,别看只有100次,如果是暴力修改的话,时间复杂度能达到1e7,常数稍大点 ...
- 950. 郁闷的出纳员(Splay树)
OIER 公司是一家大型专业化软件公司,有着数以万计的员工. 作为一名出纳员,我的任务之一便是统计每位员工的工资. 这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资. ...
- bzoj 1503 郁闷的出纳员 (平衡树+前缀和)
题意 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资. ...
- 郁闷的出纳员(splay, 树状数组可做)
题面 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如 ...
- BZOJ 1503 郁闷的出纳员(splay)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 题意:给出一个数列(初始为空),给出一个最小值Min,当数列中的数字小于Min时自动 ...
- 【洛谷P1486】郁闷的出纳员【树状数组】
题目描述 题目链接 分析 听说暴力能过 ,不敢打Treap/线段树. 很巧妙的一道题,第一次听说树状数组查询第k大/小的数. 定义树状数组为工资点上的人数,对于工资的整体增减可以通过设置变量p统一维护 ...
- [伸展树]codevs1286 郁闷的出纳员
codevs1286 郁闷的出纳员 主要是删人的问题 找工资下界,找得到的话就把他的左子树删掉删掉! 如果没有人刚好在工资下界 那么-. 找工资下界的后继,把后继的左子树删掉删掉! 如果后继为零,也就 ...
- 权值线段树小结(hdu多校,普通平衡树,郁闷的出纳员)
之前刷了一点主席树的题目,但是没有系统的做过权值线段树的题目.主席树是多根权值线段树的综合.权值线段树可以解决在总区间里求第k大的问题.在普通的线段树里,我们每一个节点维护的是权值大小.但是在权值线段 ...
- HYSBZ 1588 营业额统计 伸展树
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 题意: Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任 ...
最新文章
- MySQL备份与恢复——基于OUTFILE /LOAD DATA 逻辑备份恢复
- JS读取id和name的操作
- 计算分数加减表达式的值(信息学奥赛一本通-T1079)
- mysql注入 xfkxfk_WSS最新版多处SQL注入直接获取数据三(官方demo演示及快速定位漏洞技巧)...
- 测试一下你对IP地址的掌握水平
- python bytes转int_Python学习进阶教程(11)—数值类型
- 富士驱动器ALPHA5手动JOG运行操作
- nginx源码下载、编译和安装
- 狂团KtAdmin框架正式免费开源发布,助力独立版SAAS系统快速开发!
- 动态加密?看我如何见招拆招爬取某点评全站内容!
- 【渝粤教育】电大中专Windows操作系统 (2)作业 题库
- Kinect+Unity实现虚拟人物动作同步
- 数学学习在计算机研究领域的作用和重要性
- 没有授权,Android App 也能获取你的权限?!
- 图神经网络通用框架信息传递网络(MPNNs)
- android图标分组名称唯美,Android 使用网络图片当图标创建快捷方式(整理版本)
- 2021使用腾讯云CentOS7.6搭建Terraria泰拉瑞亚服务器
- 【Node.js】实现微信小程序订阅消息推送功能
- 千呼万唤,高并发限流算法之漏桶令牌桶来了!
- 参加2022中国计算机设计大赛软件应用web赛道总结