题目链接

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

  每做一道题都是对我那不规范的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=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} int CNT;
long long ans;
struct Splay{
struct Node{
int sum,size,fa,e[],val;
}tree[maxn];
int point,tot,root;
Splay(){point=tot=root=; }
inline int iden(int x){ return x==tree[tree[x].fa].e[]?:; }
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[]].size+tree[tree[x].e[]].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^];
connect(b,y,sony);
connect(y,x,sony^);
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);
else
if(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=;
return tot;
}
int build(int val){
if(root==){ root=create(val,); 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?:;
if(tree[now].e[nxt]==){
connect(create(val,now),now,nxt);
update(now);
return tot;
}
now=tree[now].e[nxt];
}
return ;
}
inline void insert(int val){
int p=build(val);
if(++CNT==){
CNT=;
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?:;
now=tree[now].e[nxt];
}
return ;
}
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[];
}
else now=tree[now].e[];
}
return ans;
}
void dele(int val){
int deal=upper(val);
if(tree[deal].val<val){
ans+=tree[root].size;
root=;
return;
}
splay(deal,root);
ans+=tree[tree[deal].e[]].size;
tree[tree[deal].e[]].fa=;
tree[deal].e[]=;
update(deal);
}
int arank(int rnk){
int now=root;
while(rnk){
int used=tree[now].size-tree[tree[now].e[]].size;
if(tree[tree[now].e[]].size<rnk&&used>=rnk) return tree[now].val;
if(rnk<=used) now=tree[now].e[];
else{
rnk-=used;
now=tree[now].e[];
}
}
if(++CNT==&&now){
splay(now,root);
CNT=;
}
return tree[now].val;
}
int query(int rnk,long long tag){
if(tree[root].size<rnk) return -;
return arank(tree[root].size-rnk+)+tag;
}
}s;
long long tag=;
int main(){int n=read(),m=read();
for(int i=;i<=n;++i){
char c[];int x;
scanf("%s%d",c,&x);
switch(c[]){
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 ;
}

【Luogu】P1486郁闷的出纳员(Splay)的更多相关文章

  1. 平衡树 - Luogu 1486 郁闷的出纳员

    这么久没写平衡树了,再来一发... P1486 郁闷的出纳员 题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的 ...

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

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

  3. NOI2004 郁闷的出纳员 Splay

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

  4. bzoj 1503郁闷的出纳员(splay)

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

  5. 洛谷P1486 [NOI2004]郁闷的出纳员(splay)

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

  6. 【BZOJ1503】 [NOI2004]郁闷的出纳员 splay

    splay模板题,都快把我做忧郁了. 由于自己调两个坑点. 1.删除时及时updata 2.Kth 考虑k满足该点的条件即r->ch[1]->size+1<=k && ...

  7. 【NOI2004】郁闷的出纳员 - Splay

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

  8. BZOJ1503 [NOI2004]郁闷的出纳员 splay

    原文链接http://www.cnblogs.com/zhouzhendong/p/8086240.html 题目传送门 - BZOJ1503 题意概括 如果某一个员工的工资低于了min,那么,他会立 ...

  9. 洛谷.1486.[NOI2004]郁闷的出纳员(Splay)

    题目链接 /* BZOJ1503: 3164kb 792ms/824ms(新建节点) 洛谷 : 3.06mb 320ms/308ms(前一个要慢wtf 其实都差不多,但前者好写) 四种操作: A:所有 ...

随机推荐

  1. UVA 10891 Game of Sum (决策优化)

    这是一个零和博弈,最高得分只和序列以及谁先手有关. d[i][j],表示i到j的序列当前取的这个人的最高得分,转移以后状态是新的区间和另一个人取,从中取最小值. 决策的最小值也可递推. #includ ...

  2. [web开发] Vue + spring boot + echart 微博爬虫展示平台

    1.微博登录 2.爬取数据 3.mysql存储 4.pyechart本地展示 5.用vue搭建网站web展示 先放图: 1.微博登录 新浪微博的登录不是简单的post就能解决的,他的登录有加密,所以我 ...

  3. Kunernetes集群架构与组件

    架构如图: master节点:主要是集群控制面板的功能,来管理整个集群,包括全局的角色,调度,都是在master节点进行控制 有三个组件: API Server:  是 k8s提供的一个统一入口,它是 ...

  4. 使用FontDialog组件设置字体

    实现效果: 知识运用: FontDialog组件的Font属性 //获取或设置选定的字体 public Font Font  { get;set; } 实现代码: private void butto ...

  5. 2717: 递归函数求n的阶乘

    2717: 递归函数求n的阶乘 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1329  Solved: 942[Submit][Status][Web ...

  6. Noip 训练指南

    目录 Noip 训练指南 图论 数据结构 位运算 期望 题解 Noip 训练指南 目前完成 \(4 / 72\) 图论 [ ] 跳楼机 [ ] 墨墨的等式 [ ] 最优贸易 [ ] 泥泞的道路 [ ] ...

  7. 【贪心】10.24assassin

    题目分析 没有题目分析…… 寄存一下神奇反悔贪心 #include<bits/stdc++.h> ; struct node { int a,b; node(, ):a(x),b(y) { ...

  8. linux 下 docker-compose安装

    docker和dockers-compose的版本兼容对照 以下是我的服务器的相关信息 linux版本 [root@izbp16fm097gaw3tdaog2wz bin]# cat /proc/ve ...

  9. python入门:最基本的用户登录用户登录,三次错误机会

    #!/usr/bin/env python # -*- coding:utf-8 -*- #用户登录,三次错误机会 """ 导入getpass,给x赋值为1,while真 ...

  10. 18.Yii2.0框架模型修改记录 和 修改点击量

    目录 修改数据 修改点击量 修改数据 上面要 use app\models\Article; //修改 //http://yii.com/?r=home/Edit public function ac ...