【Luogu】P1486郁闷的出纳员(Splay)
题目链接
名副其实的调了一下午……
每做一道题都是对我那不规范的Splay代码的刀刻斧凿一般的修正啊……
Splay。如果有一批员工不干了,那就找还能干的薪水最少的员工,把它splay到根,删除它的左子树。
然后其他地方加一下标记乱搞就行,这个标记……跟NOIP蚯蚓那个题很像。qwq。
#include<cstdio> #include<cstring> #include<cctype> #include<algorithm> #include<cstdlib> #define maxn 1000200 using namespace std;inline long long read(){long long num=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}while(isdigit(ch)){num=num*10+ch-'0';ch=getchar();}return num*f; }int CNT; long long ans; struct Splay{struct Node{int sum,size,fa,e[2],val;}tree[maxn];int point,tot,root;Splay(){point=tot=root=0; }inline int iden(int x){ return x==tree[tree[x].fa].e[0]?0:1; }inline void connect(int x,int fa,int how){ tree[x].fa=fa; tree[fa].e[how]=x; }inline void update(int x){ tree[x].size=tree[tree[x].e[0]].size+tree[tree[x].e[1]].size+tree[x].sum; }inline void rotate(int x){int y=tree[x].fa; int r=tree[y].fa;if(root==y) root=x;int sony=iden(x); int sonr=iden(y);int b=tree[x].e[sony^1];connect(b,y,sony);connect(y,x,sony^1);connect(x,r,sonr);update(y); update(x);}void splay(int pos,int to){to=tree[to].fa;while(tree[pos].fa!=to){if(tree[tree[pos].fa].fa==to) rotate(pos);elseif(iden(pos)==iden(tree[pos].fa)){rotate(tree[pos].fa);rotate(pos);}else{ rotate(pos); rotate(pos); }}}int create(int val,int fa){tree[++tot].val=val; tree[tot].fa=fa;tree[tot].sum=tree[tot].size=1;return tot;}int build(int val){if(root==0){ root=create(val,0); return root; }int now=root;while(now){tree[now].size++;if(tree[now].val==val){ tree[now].sum++; return now; }int nxt=val<tree[now].val?0:1;if(tree[now].e[nxt]==0){connect(create(val,now),now,nxt);update(now);return tot;}now=tree[now].e[nxt];}return 0;}inline void insert(int val){int p=build(val);if(++CNT==50){CNT=0;splay(p,root);}}inline int find(int val){int now=root;while(now){if(tree[now].val==val) return now;int nxt=val<tree[now].val?0:1;now=tree[now].e[nxt];}return 0;}int upper(int val){int now=root,ans=root;while(now){if(tree[now].val==val) return now;if(val<tree[now].val){ans=now;now=tree[now].e[0];}else now=tree[now].e[1];}return ans;}void dele(int val){int deal=upper(val);if(tree[deal].val<val){ans+=tree[root].size;root=0;return;}splay(deal,root);ans+=tree[tree[deal].e[0]].size;tree[tree[deal].e[0]].fa=0;tree[deal].e[0]=0;update(deal);}int arank(int rnk){int now=root;while(rnk){int used=tree[now].size-tree[tree[now].e[1]].size;if(tree[tree[now].e[0]].size<rnk&&used>=rnk) return tree[now].val;if(rnk<=used) now=tree[now].e[0];else{rnk-=used;now=tree[now].e[1];}}if(++CNT==50&&now){splay(now,root);CNT=0;}return tree[now].val;}int query(int rnk,long long tag){if(tree[root].size<rnk) return -1;return arank(tree[root].size-rnk+1)+tag;} }s; long long tag=0; int main(){int n=read(),m=read();for(int i=1;i<=n;++i){char c[10];int x;scanf("%s%d",c,&x);switch(c[0]){case 'I':if(x>=m) s.insert(x-tag); break;case 'A': tag+=x; break;case 'S':tag-=x; s.dele(m-tag); break;case 'F': printf("%d\n",s.query(x,tag)); break;}}printf("%lld\n",ans);return 0; }
转载于:https://www.cnblogs.com/cellular-automaton/p/8305147.html
【Luogu】P1486郁闷的出纳员(Splay)相关推荐
- 950. 郁闷的出纳员(Splay树)
OIER 公司是一家大型专业化软件公司,有着数以万计的员工. 作为一名出纳员,我的任务之一便是统计每位员工的工资. 这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资. ...
- 郁闷的出纳员(splay, 树状数组可做)
题面 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如 ...
- HYSBZ - 1503 郁闷的出纳员(Splay)
题目链接:点击查看 题目大意:中文题 题目分析:利用Splay加一点思维还是比较容易解决的,对于所有员工加工资以及减工资的操作,别看只有100次,如果是暴力修改的话,时间复杂度能达到1e7,常数稍大点 ...
- 洛谷P1486 [NOI2004] 郁闷的出纳员 题解
P1486 [NOI2004] 郁闷的出纳员 题目链接:P1486 [NOI2004] 郁闷的出纳员 题意:维护一个数据结构,支持 插入一个大小为 kkk 的值,小于下界时不插入 所有元素加上 kk ...
- HNOI2004 郁闷的出纳员(Splay)
郁闷的出纳员 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的 ...
- [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
- 权值线段树小结(hdu多校,普通平衡树,郁闷的出纳员)
之前刷了一点主席树的题目,但是没有系统的做过权值线段树的题目.主席树是多根权值线段树的综合.权值线段树可以解决在总区间里求第k大的问题.在普通的线段树里,我们每一个节点维护的是权值大小.但是在权值线段 ...
- 【BZOJ1503】郁闷的出纳员
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 11250 Solved: 3962 [Submit][St ...
- [伸展树]codevs1286 郁闷的出纳员
codevs1286 郁闷的出纳员 主要是删人的问题 找工资下界,找得到的话就把他的左子树删掉删掉! 如果没有人刚好在工资下界 那么-. 找工资下界的后继,把后继的左子树删掉删掉! 如果后继为零,也就 ...
最新文章
- 超硬核,整理的这10个自动化测试框架,使用后简直如有神助
- java 边界_Java数组边界问题
- 如何完全卸载VMware
- C++ 播放音频流(PCM裸流)
- 查看用户账户过期信息
- mysql5.7设置SQL Mode
- UVA 11100 The Trip, 2007
- 今天我注册博客园了,我很开心!
- 洛谷P3327:[SDOI2015]约数个数和(莫比乌斯反演)
- Python实现石头-剪刀-布小游戏
- jquery获取动态表格行号_jquery得到表格当前行数据
- 利用模态DIV结合UpdateProgress防止页面重复提交
- 2021-06-21属性选择器
- [20190213]学习bbed-恢复删除的数据.txt
- 七夕情人节在一起告白HTML源码(程序员专属情人节表白网站)
- blockquote
- mysql 内联注释_TSRC挑战赛:WAF之SQL注入防御思路分享
- 旷世face++人脸识别实名鉴权商汤科技ocr二要素哪家强
- Linux PXE无盘工作站
- 机器学习数据集(训练集、测试集)划分方法
热门文章
- python md5加密字符串_python md5加密字符串的例子
- 搭建gradle环境
- 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_第十章:利用Python实现朴素贝叶斯模型
- 风变Python 15数据的读入以及写出以及数据的编码类型
- php加密密码解析,php密码加密解密
- 如何创建linux 脚本,如何创建和执行shell脚本
- python自定义函数的关键字_python学习之--自定义函数:
- 文字识别(五)--自然场景文本检测技术综述(CTPN, SegLink, EAST)
- 人脸检测(六)--haar分类器代码理解
- pmos低电平驱动_三极管和MOS管驱动电路的正确用法