题目链接

  名副其实的调了一下午……

  每做一道题都是对我那不规范的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)相关推荐

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

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

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

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

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

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

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

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

  5. HNOI2004 郁闷的出纳员(Splay)

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

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

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

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

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

  8. 【BZOJ1503】郁闷的出纳员

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 11250  Solved: 3962 [Submit][St ...

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

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

最新文章

  1. 超硬核,整理的这10个自动化测试框架,使用后简直如有神助
  2. java 边界_Java数组边界问题
  3. 如何完全卸载VMware
  4. C++ 播放音频流(PCM裸流)
  5. 查看用户账户过期信息
  6. mysql5.7设置SQL Mode
  7. UVA 11100 The Trip, 2007
  8. 今天我注册博客园了,我很开心!
  9. 洛谷P3327:[SDOI2015]约数个数和(莫比乌斯反演)
  10. Python实现石头-剪刀-布小游戏
  11. jquery获取动态表格行号_jquery得到表格当前行数据
  12. 利用模态DIV结合UpdateProgress防止页面重复提交
  13. 2021-06-21属性选择器
  14. [20190213]学习bbed-恢复删除的数据.txt
  15. 七夕情人节在一起告白HTML源码(程序员专属情人节表白网站)
  16. blockquote
  17. mysql 内联注释_TSRC挑战赛:WAF之SQL注入防御思路分享
  18. 旷世face++人脸识别实名鉴权商汤科技ocr二要素哪家强
  19. Linux PXE无盘工作站
  20. 机器学习数据集(训练集、测试集)划分方法

热门文章

  1. python md5加密字符串_python md5加密字符串的例子
  2. 搭建gradle环境
  3. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_第十章:利用Python实现朴素贝叶斯模型
  4. 风变Python 15数据的读入以及写出以及数据的编码类型
  5. php加密密码解析,php密码加密解密
  6. 如何创建linux 脚本,如何创建和执行shell脚本
  7. python自定义函数的关键字_python学习之--自定义函数:
  8. 文字识别(五)--自然场景文本检测技术综述(CTPN, SegLink, EAST)
  9. 人脸检测(六)--haar分类器代码理解
  10. pmos低电平驱动_三极管和MOS管驱动电路的正确用法