题目链接: 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 郁闷的出纳员 伸展树相关推荐

  1. HYSBZ - 1503 郁闷的出纳员(Splay)

    题目链接:点击查看 题目大意:中文题 题目分析:利用Splay加一点思维还是比较容易解决的,对于所有员工加工资以及减工资的操作,别看只有100次,如果是暴力修改的话,时间复杂度能达到1e7,常数稍大点 ...

  2. 950. 郁闷的出纳员(Splay树)

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

  3. bzoj 1503 郁闷的出纳员 (平衡树+前缀和)

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

  4. 郁闷的出纳员(splay, 树状数组可做)

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

  5. BZOJ 1503 郁闷的出纳员(splay)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 题意:给出一个数列(初始为空),给出一个最小值Min,当数列中的数字小于Min时自动 ...

  6. 【洛谷P1486】郁闷的出纳员【树状数组】

    题目描述 题目链接 分析 听说暴力能过 ,不敢打Treap/线段树. 很巧妙的一道题,第一次听说树状数组查询第k大/小的数. 定义树状数组为工资点上的人数,对于工资的整体增减可以通过设置变量p统一维护 ...

  7. [伸展树]codevs1286 郁闷的出纳员

    codevs1286 郁闷的出纳员 主要是删人的问题 找工资下界,找得到的话就把他的左子树删掉删掉! 如果没有人刚好在工资下界 那么-. 找工资下界的后继,把后继的左子树删掉删掉! 如果后继为零,也就 ...

  8. 权值线段树小结(hdu多校,普通平衡树,郁闷的出纳员)

    之前刷了一点主席树的题目,但是没有系统的做过权值线段树的题目.主席树是多根权值线段树的综合.权值线段树可以解决在总区间里求第k大的问题.在普通的线段树里,我们每一个节点维护的是权值大小.但是在权值线段 ...

  9. HYSBZ 1588 营业额统计 伸展树

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 题意: Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任 ...

最新文章

  1. MySQL备份与恢复——基于OUTFILE /LOAD DATA 逻辑备份恢复
  2. JS读取id和name的操作
  3. 计算分数加减表达式的值(信息学奥赛一本通-T1079)
  4. mysql注入 xfkxfk_WSS最新版多处SQL注入直接获取数据三(官方demo演示及快速定位漏洞技巧)...
  5. 测试一下你对IP地址的掌握水平
  6. python bytes转int_Python学习进阶教程(11)—数值类型
  7. 富士驱动器ALPHA5手动JOG运行操作
  8. nginx源码下载、编译和安装
  9. 狂团KtAdmin框架正式免费开源发布,助力独立版SAAS系统快速开发!
  10. 动态加密?看我如何见招拆招爬取某点评全站内容!
  11. 【渝粤教育】电大中专Windows操作系统 (2)作业 题库
  12. Kinect+Unity实现虚拟人物动作同步
  13. 数学学习在计算机研究领域的作用和重要性
  14. 没有授权,Android App 也能获取你的权限?!
  15. 图神经网络通用框架信息传递网络(MPNNs)
  16. android图标分组名称唯美,Android 使用网络图片当图标创建快捷方式(整理版本)
  17. 2021使用腾讯云CentOS7.6搭建Terraria泰拉瑞亚服务器
  18. 【Node.js】实现微信小程序订阅消息推送功能
  19. 千呼万唤,高并发限流算法之漏桶令牌桶来了!
  20. 参加2022中国计算机设计大赛软件应用web赛道总结

热门文章

  1. 自动驾驶发展到了哪个阶段?七大应用场景走进现实
  2. 人工智能与人类智能的竞赛:人机对抗智能技术全梳理
  3. 美国在人工智能领域亟待解决的5大难题
  4. 2019上海车展展后报告(整车篇)
  5. 《人类简史》作者:应对 AI 革命,要打造新的经济、社会和教育体系
  6. 谷歌全方位自曝Waymo无人车技术方案 | 42页报告要点解读+下载
  7. 为什么程序员都不写文档?
  8. 什么?强化学习竟然来源于心理学?
  9. mac -- 安装OpenCV
  10. unix系统编程小结(二)------文件和目录