题意:OIER公司是一家大型专业化软件公司,有着数以万计的员工。作为一名出纳员,我的任务之一便是统计每位员工的工资。这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资。如果他心情好,就可能把每位员工的工资加上一个相同的量。反之,如果心情不好,就可能把他们的工资扣除一个相同的量。我真不知道除了调工资他还做什么其它事情。
工资的频繁调整很让员工反感,尤其是集体扣除工资的时候,一旦某位员工发现自己的工资已经低于了合同规定的工资下界,他就会立刻气愤地离开公司,并且再也不会回来了。每位员工的工资下界都是统一规定的。每当一个人离开公司,我就要从电脑中把他的工资档案删去,同样,每当公司招聘了一位新员工,我就得为他新建一个工资档案。
老板经常到我这边来询问工资情况,他并不问具体某位员工的工资情况,而是问现在工资第k多的员工拿多少工资。每当这时,我就不得不对数万个员工进行一次漫长的排序,然后告诉他答案。
好了,现在你已经对我的工作了解不少了。正如你猜的那样,我想请你编一个工资统计程序。怎么样,不是很困难吧?

一棵无旋treap就好了。

#include<bits/stdc++.h>
using namespace std;
const int N=200010;
struct gg{int ls,rs,w,rnd,laz,sz;
}node[N];int tot=0,mn,rt,bps=0,ans=0;
vector<int>bin;
void push_up(int x)
{node[x].sz=node[node[x].ls].sz+node[node[x].rs].sz+1;}
int new_node(int w)
{int nw;if(bps<bin.size())nw=bin[bps++];else nw=++tot;node[nw].rnd=rand()*rand(),node[nw].laz=0;node[nw].ls=node[nw].rs=0;node[nw].sz=1,node[nw].w=w;return nw;
}
void clear(int x)
{if(node[x].ls)clear(node[x].ls);++ans;bin.push_back(x);if(node[x].rs)clear(node[x].rs);
}
void push_down(int x)
{if(node[x].laz){if(node[x].ls)node[node[x].ls].w+=node[x].laz,node[node[x].ls].laz+=node[x].laz;if(node[x].rs)node[node[x].rs].w+=node[x].laz,node[node[x].rs].laz+=node[x].laz;node[x].laz=0;}
}
int mg(int x,int y)
{if(!x||!y)return x+y;push_down(x),push_down(y);if(node[x].rnd<=node[y].rnd){node[x].rs=mg(node[x].rs,y);push_up(x);return x;}else{node[y].ls=mg(x,node[y].ls);push_up(y);return y;}
}
void split1(int nw,int k,int &x,int &y)
{if(!nw)x=y=0;else{push_down(nw);if(node[node[nw].ls].sz>=k)y=nw,split1(node[nw].ls,k,x,node[nw].ls);else x=nw,split1(node[nw].rs,k-node[node[nw].ls].sz-1,node[nw].rs,y);push_up(nw);}
}
void split2(int nw,int k,int &x,int &y)
{if(!nw)x=y=0;else{push_down(nw);if(node[nw].w<=k)x=nw,split2(node[nw].rs,k,node[nw].rs,y);else y=nw,split2(node[nw].ls,k,x,node[nw].ls);push_up(nw);}
}
void ins(int nw)
{int x,y;if(nw<mn)return;split2(rt,nw,x,y);rt=mg(mg(x,new_node(nw)),y);return;
}
void add(int nw)
{int x,y;node[rt].w+=nw,node[rt].laz+=nw;if(nw<0){split2(rt,mn-1,x,y);if(x)clear(x);rt=y;}return;
}
void ask(int nw)
{int x,y,z;nw=node[rt].sz-nw+1;if(nw<=0){puts("-1");return;}split1(rt,nw-1,x,y);split1(y,1,y,z);if(y)printf("%d\n",node[y].w);else puts("-1");rt=mg(x,mg(y,z));return;
}
int main()
{srand(23336666);int n,nw;char s[10];scanf("%d%d",&n,&mn);for(int i=1;i<=n;i++){scanf("%s",s);scanf("%d",&nw);if(s[0]=='I')ins(nw);else if(s[0]=='A')add(nw);else if(s[0]=='S')add(-nw);else ask(nw);}printf("%d\n",ans);
}

刷题集--郁闷的出纳员相关推荐

  1. 2020-07算法刷题集

    2020-07算法刷题集 前言 0715-一年中的第几天 0716-分数加减运算 0717-移动石子直到连续 0719-拼写单词 0720-有效的回旋镖 0722-最后一块石头的重量 0723-有效三 ...

  2. 可爱宝宝力扣刷题集目录

    总述 编程菜鸟一枚!2020年7月,我仍然还是一个几乎不会码代码的菜鸟,(好多小伙伴应该从本科入学就开始了吧.哎,捂脸并逃走),不过从今年4月底刷了有一个多月,狂刷了300多倒(截止2020.6,8) ...

  3. 洛谷OJ素数及其筛法刷题集

    学会了线性筛.快速判断素数的读者可以在OJ上刷这些题了(后续将会完善补充) P3912 素数个数 P1835 素数密度 本题稍有难度,可以结合合数的性质来快速筛除区间内的合数,时间复杂度大致接近于区间 ...

  4. DancingLinks刷题集

    HDU 3663 Power Stations 精确覆盖 题意:每个城市i有xi->yi天可以成为发射站,发射站覆盖范围为与该站有一条边链接的城市. 同时,每个每天城市必须且只能被一个发射站覆盖 ...

  5. PAT刷题集(乙级)1003 我要通过!(20 分)

    1003 我要通过!(20 分) "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件, ...

  6. leetcode刷题集:栈与队列

    文章目录 01 用两个栈模拟一个队列 02 包含min函数的栈 03 栈的压入.弹出序列 队列的最大值 01 用两个栈模拟一个队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appen ...

  7. 刷题集--杰杰的女性朋友

    题意:杰杰是魔法界的一名传奇人物.他对魔法具有深刻的洞察力,惊人的领悟力,以及令人叹为观止的创造力.自从他从事魔法竞赛以来,短短几年时间,就已经成为世界公认的实力最强的魔法选手之一.更让人惊叹的是,他 ...

  8. 刷题集--GameZ游戏排名系统

    题意:GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在世界上的排名.得分越高,排名就越靠前.当两个玩家的名次相同时,先上传记录者优先 ...

  9. C#LeetCode刷题-并查集

    并查集篇 # 题名 刷题 通过率 难度 128 最长连续序列 39.3% 困难 130 被围绕的区域 30.5% 中等 200 岛屿的个数 38.4% 中等 547 朋友圈 45.1% 中等 684 ...

最新文章

  1. 报告 | 从20世纪70年代至今,自动驾驶汽车的发展经历了哪些历史性的变革?
  2. php阿里大于验证码开发,阿里大于验证码发送 (ThinkPhp框架)
  3. flutter-webview的坑用到第三方插件的
  4. Storm,Trident,Spark Streaming,Samza和Flink主流流处理框架比较
  5. js有默认参数的函数加参数_函数参数:默认,关键字和任意
  6. MySQL 高级 —— MVCC 多版本并发控制
  7. 嵌入式 linux usb转串口,Linux下,USB转串口问题
  8. vue 手写 移动端 左右滑动 防止上下滑动冲突 超过宽度一半切换
  9. Mac 版pr 破解教程,亲测可行。
  10. CDA I级学习 - CDA I级考试大纲
  11. 【独家折扣】淘客小程序源码
  12. 计算机关机的DOS命令是,如何设置电脑自动关机dos指令
  13. 80004005错误代码_Win10系统提示0x80004005错误代码快速解决方法
  14. 双系统下Ubuntu完整卸载
  15. 在大数据认知观和真实性不一样的?
  16. 知乎客户端埋点流程、模型和平台技术
  17. thunderbird 雷鸟中文版下载,安装
  18. 【Blender小技巧】点对齐
  19. 说句心里话python怎么写_说句心里话作文
  20. DirectX的设置

热门文章

  1. python ddt安装
  2. 关于数据清理,你必须知道这些!
  3. python水浒传名字次数_梁山上,小李广的“小”是什么意思?“病关索”是生病的关索?...
  4. 人机工程学的基本设计原则(笔记)
  5. 苹果录屏精灵_炸裂!掌握苹果手机的“十八般武艺”,从此让黑科技横行天下!...
  6. 准备工作—PPT配色篇
  7. win7资源管理器老是停止工作解决方法
  8. JVM系列之故障排查与性能调优(重点)
  9. BarTender从数据库获取标签打印数量设置方法
  10. 号外,阿里P8首发:从阿里P5到阿里P8:年薪70万~200万(加股票)的涨薪路线