【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

因为所有人工资同时递减。
所以可以设置一个变化值delta.
然后每个人的初始值为k
则把k-delta加入伸展树中。
会发现delta变化之后。
伸展树中每个人的工资就仍然是原先的值+delta

比如

I 2000

delta = 100

则会插入一个1900到伸展树中。

然后delta的值可能会发生变化。

但会发现1900+delta会总是和这个人的当前工资相同

(并且对于每个人都是如此

那么我们只要把min-delta插入到伸展树种。

则比他小的数字都是要离开的人

(把这个min-delta移动到根节点。

然后把它的左子树大小累加一下就好

至于找第k大。

则也是伸展树能够完成的事情。

x-delta插入

以及delta改变之后

x+delta始终是每个人的真实工资这一点很关键。

(很棒的ideal

【代码】

#include <cstdio>
#define which(x) (ch[fa[x]][1]==x)
using namespace std; int n,mi,delta; const int N = 1e5 + 200; int m,fa[N], tot, ch[N][2], root, x, siz[N],value[N]; void push_up(int x)
{
siz[x] = siz[ch[x][0]] + siz[ch[x][1]] + 1;
} int Rank(int x, int k)
{
if (siz[ch[x][0]] >= k)
return Rank(ch[x][0], k);
else
if (k == siz[ch[x][0]] + 1)
return x;
else
return Rank(ch[x][1], k - siz[ch[x][0]] - 1);
} void Rotate(int x)
{
int f = fa[x];
bool k = which(x);
ch[f][k] = ch[x][!k];
ch[x][!k] = f;
ch[fa[f]][which(f)] = x;
fa[ch[f][k]] = f;
fa[x] = fa[f];
fa[f] = x;
siz[x] = siz[f];
push_up(f);
} void Splay(int x, int g)
{
while (fa[x] != g)
{
int f = fa[x];
if (fa[f] == g)
{
Rotate(x);
break;
}
if (which(x) ^ which(f))
Rotate(x);
else
Rotate(f);
Rotate(x);
}
if (!g) root = x;
} void cr(int x,int num)
{
if (!x){
root = ++tot;
siz[tot] = 1;
value[tot] = num;
return;
}
if (ch[x][num>value[x]]==0){
ch[x][num>value[x]] = ++tot;
value[tot] = num;
fa[tot] = x;
siz[tot] = 1;
}else
cr(ch[x][num>value[x]],num);
push_up(x);
} int main()
{
//freopen("D:\\rush.txt","r",stdin);
long long ans = 0; scanf("%d%d",&n,&mi);
for (int i = 1;i <= n;i++){
int k;
char s[5];
scanf("%s",s);
if (s[0]=='I'){
scanf("%d",&k);
if (k<mi) continue;
cr(root,k-delta);
Splay(tot,0);
}else if (s[0]=='A'){
scanf("%d",&k);
delta+=k;
}else if (s[0]=='S'){
scanf("%d",&k);
delta-=k;
cr(root,mi-delta);
Splay(tot,0);
ans+=siz[ch[tot][0]];
root = ch[tot][1];
fa[root] = 0;
}else if (s[0]=='F'){
scanf("%d",&k);
if (k>siz[root]){
printf("%d\n",-1);
}else{
int x = Rank(root,siz[root]-k+1);
Splay(x,0);
printf("%d\n",value[x]+delta);
}
}
}
printf("%lld\n",ans);
return 0;
}

【BZOJ 1503】[NOI2004]郁闷的出纳员的更多相关文章

  1. (WA)BZOJ 1503: [NOI2004]郁闷的出纳员

    二次联通门 : BZOJ 1503: [NOI2004]郁闷的出纳员 /* BZOJ 1503: [NOI2004]郁闷的出纳员 考虑这样一个事实 无论是加或减 都是针对全体人员的 那么只需要记录一个 ...

  2. BZOJ 1503: [NOI2004]郁闷的出纳员

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 10526  Solved: 3685[Submit][Stat ...

  3. BZOJ 1503: [NOI2004]郁闷的出纳员 splay

    1503: [NOI2004]郁闷的出纳员 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作 ...

  4. bzoj 1503: [NOI2004]郁闷的出纳员 Treap

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 6263  Solved: 2190[Submit][Statu ...

  5. bzoj 1503: [NOI2004]郁闷的出纳员 -- 权值线段树

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

  6. 1503: [NOI2004]郁闷的出纳员 (SBT)

    1503: [NOI2004]郁闷的出纳员 http://www.lydsy.com/JudgeOnline/problem.php?id=1503 Time Limit: 5 Sec  Memory ...

  7. bzoj 3224 NOI2004郁闷的出纳员

    NOI2004郁闷的出纳员 2013年12月26日6,1818 输入描述 Input Description 第一行有两个非负整数n和min.n表示下面有多少条命令,min表示工资下界. 接下来的n行 ...

  8. 【BZOJ】1503: [NOI2004]郁闷的出纳员(Splay)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1503 这题没有看题解就1a了-好开心,, 其实后面去看题解发现他们的都很麻烦,其实有种很简单的做法: ...

  9. 1503. [NOI2004]郁闷的出纳员【平衡树-splay】

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

  10. 1503: [NOI2004]郁闷的出纳员

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 13723  Solved: 4989[Submit][Status][Discuss] Descripti ...

随机推荐

  1. xgboost学习

    1.原理 https://www.cnblogs.com/zhouxiaohui888/p/6008368.html 2.实战 xgboost中比较重要的参数介绍: (1)学习率:learning r ...

  2. vue 页面跳转及参数传递和接收

    跳转: this.$router.push({name: 'My',params:{ id:'1',name:'anson'}});   接收: {{this.$route.params.id}}

  3. 【Python 学习】通过while循环和for循环猜测年龄

    Python中可以通过while和for循环来限制猜测年龄的次数 1. 在猜测年龄的小程序中,不加循环的代码是这样的: age_of_yu = 23 guess_age = int(input(&qu ...

  4. SpringBoot2.0中使用订阅redis的多个频道的消息

    声明:参考文章:https://blog.csdn.net/myNameIssls/article/details/75471012?locationNum=2&fps=1 一·使用maven ...

  5. poi生成word2007及以上文件

    一.简介 对于poi来说,poi可以完成对word.excel.ppt的处理.word目前有两种文件格式,一种是doc后缀.另一种是docx后缀的.2007之前的版本都是doc后缀的,这种格式poi使 ...

  6. 【【henuacm2016级暑期训练】动态规划专题 N】Valid Sets

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 给你一棵树. 让你统计其中子树T的数量. 这个子树T要满足最大值和最小值之差小于等于d 树形DP 可以枚举点root为子树的根. 统 ...

  7. Windows下面使用curl

    Windows下面使用curl 学习了:https://www.cnblogs.com/xing901022/p/4652624.html 下载地址:https://curl.haxx.se/down ...

  8. HDU 2475 Box 树型转线型 + 伸展树

    树型转线型.第一次听说这个概念. . . , 可是曾经已经接触过了,如LCA的预处理部分和树链剖分等.可是没想到还能这么用,三者虽说有不同可是大体思想还是非常相近的,学习了. 推荐博客http://b ...

  9. cocos2d-x ios游戏开发初认识(九) 音效、粒子系统与存储

    我们知道.一个游戏少不了声音.一些好听的声音会提起你对游戏的兴趣,当然做好听的声音不是我们要学的,我们的目的是把声音在适当的时候放出来.顺便在这节中会说下简单的粒子系统和文件存储. 一.声音的播放: ...

  10. Codeforces Round #311 (Div. 2)题解

    A. Ilya and Diplomas time limit per test 1 second memory limit per test 256 megabytes input standard ...