洛谷 1486/BZOJ 1503 郁闷的出纳员
1503: [NOI2004]郁闷的出纳员
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 13866 Solved: 5069
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
I 60
I 70
S 50
F 2
I 30
S 15
A 5
F 1
F 2
Sample Output
20
-1
2
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype> inline void read(int & x)
{
int k = ; x = ;
char c = getchar();
while (!isdigit(c))
if (c == '-') k = -, c = getchar();
else c = getchar();
while (isdigit(c))
x = (x << ) + (x << ) + (c ^ ),
c = getchar();
x *= k;
} const int N = , inf = ;
const double alpha = 0.8;
int m, low, x, root, goat, tot = , Cm = , what = , len, id = ;
int siz[N], val[N], faz[N], son[N][], cur[N], vis[N]; char opt; inline int max(const int &a, const int &b)
{
return a > b ? a : b;
} inline int min(const int &a, const int &b)
{
return a > b ? b : a;
} inline int balance(int u)
{
return (double)alpha * siz[u] > (double)max(siz[son[u][]], siz[son[u][]]);
} inline int Getx(int x)
{
int u = root;
while (u)
if (val[u] == x) return u;
else if (val[u] > x) u = son[u][];
else u = son[u][];
return u;
} inline void Recycle(int u)
{
if (!u) return;
Recycle(son[u][]);
cur[++len] = u;
Recycle(son[u][]);
} inline int Build(int l, int r)
{
if (l > r) return ;
int mid = l + r >> , u = cur[mid];
faz[son[u][] = Build(l, mid - )] = u;
faz[son[u][] = Build(mid + , r)] = u;
siz[u] = siz[son[u][]] + siz[son[u][]] + (val[u] + Cm >= low);
return u;
} inline void Rebuild(int u)
{
len = ;
Recycle(u);
int y = faz[u], ch = son[y][] == u, rt = Build(, len);
faz[son[y][ch] = rt] = y;
if (root == u) root = rt;
} inline void Insert(int x)
{
if (x + Cm < low) return;
if (!root)
{
siz[root = ++tot] = ;
faz[root] = ;
val[root] = x;
return;
}
int u = root;
while (true)
{
++siz[u];
int y = u;
u = son[u][x >= val[u]];
if (!u)
{
siz[++tot] = ;
val[tot] = x;
faz[tot] = y;
son[y][x >= val[y]] = tot;
break;
}
}
goat = ;
faz[root] = ;
for (int i = tot; i; i = faz[i])
{
if (!balance(i)) goat = i;
}
if (goat) Rebuild(goat);
} inline void Getkth(int k)
{
if (k > siz[root]) { puts("-1"); return; };
int u = root;
while (u)
{
if (siz[son[u][]] + == k) break;
else if (siz[son[u][]] >= k) u = son[u][];
else k -= siz[son[u][]] + , u = son[u][];
}
if (!u || val[u] + Cm < low) puts("-1"); else printf("%d\n", val[u] + Cm);
} void DFS(int u)
{
if (!u) return;
DFS(son[u][]); DFS(son[u][]);
if (val[u] + Cm < low && !vis[u]) val[u] = -inf, ++what, vis[u] = ;
} void CNT(int u)
{
if (!u) return;
CNT(son[u][]); CNT(son[u][]);
siz[u] = siz[son[u][]] + siz[son[u][]] + (val[u] + Cm >= low);
} int main()
{
read(m), read(low);
for (int i = ; i <= m; ++i)
{
opt = getchar();
while (opt == ' ' || opt == '\n') opt = getchar();
read(x);
if (opt == 'F') Getkth(x);
if (opt == 'I') Insert(x - Cm);
if (opt == 'A') Cm += x;
if (opt == 'S') Cm -= x, DFS(root), CNT(root);
}
DFS(root);
printf("%d", what);
return ;
}
洛谷 1486/BZOJ 1503 郁闷的出纳员的更多相关文章
- 【洛谷1486】[NOI2004] 郁闷的出纳员(Splay的小运用)
点此看题面 大致题意: 你是一个公司的出纳员,现在有\(n\)个操作,操作有4种:新来一个员工.增加全体员工工资.减少全体员工工资.查询第\(k\)多的工资.若一个员工的工资在某一时刻低于合同上的工资 ...
- [BZOJ 1503]郁闷的出纳员(fhq treap)
[BZOJ 1503]郁闷的出纳员 题面 第一行有两个非负整数n和min.n表示下面有多少条命令,min表示工资下界. 接下来的n行,每行表示一条命令.命令可以是以下四种之一: 名称 格式 作用 I命 ...
- bzoj 1503郁闷的出纳员(splay)
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 11759 Solved: 4163[Submit][Stat ...
- BZOJ 1503 郁闷的出纳员 (treap)
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 13370 Solved: 4808[Submit][Stat ...
- 洛谷 P1486 BZOJ 1503 NOI 2004 郁闷的出纳员 fhq treap
思路: 1. 此处的fhq treap的分裂是按照权值分裂然后插入的.将小于k的分为一棵子树,大于等于k的分为另一棵子树. 2. 删除的时候只要将大于等于min的分裂到以root为根的树中,另一部分不 ...
- BZOJ 1503 郁闷的出纳员
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- BZOJ 1503 郁闷的出纳员(平衡树)(NOI 2004)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作 ...
- BZOJ 1503 郁闷的出纳员(splay)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 题意:给出一个数列(初始为空),给出一个最小值Min,当数列中的数字小于Min时自动 ...
- 洛谷.1486.[NOI2004]郁闷的出纳员(Splay)
题目链接 /* BZOJ1503: 3164kb 792ms/824ms(新建节点) 洛谷 : 3.06mb 320ms/308ms(前一个要慢wtf 其实都差不多,但前者好写) 四种操作: A:所有 ...
随机推荐
- JS高级学习历程-2
1.dom操作,利用dom创建无序列表.并追加到body里边,里面要求至少有四个项目. <!DOCTYPE html> <html lang="en"> & ...
- Django (十三) 项目部署 3
阿里云项目部署 部署Django项目 1, 配置nginx 1.1 进入:cd /var/www, 将外面压缩好的AXF项目拖入xshell中,并解压 1.2 配置nginx.conf: 将htt ...
- python之is 和 == 的区别//编码和解码
一.is 和 == 的区别: 1 .id() 内存地址 2. == 比较 #比较两边的值 3. is 比较 #比较的是内存地址 数字,字符串,有小数据池 #数字小 ...
- selenum autoit上传图片
目前,一般实现文件图片上传的方式都是有一个按钮,点击之后直接调用操作系统自身的弹框,选择文件后,实现上传.因为Selenium不支持调用操作系统的操作,所以这种情况下,利用Selenium无法完成图片 ...
- 配置本地和远程maven仓库
<mirrors><mirror> <id>alimaven</id> <name>aliyun maven</name> &l ...
- Spring连接数据库
public class Book { private int bookid; private String bookname; private String bookauthor; private ...
- (译)Minimal Shader(最小的着色器)
(原文:https://en.wikibooks.org/wiki/Cg_Programming/Unity/Minimal_Shader) This tutorial covers the basi ...
- 基于WebSocket和SpringBoot的群聊天室
引入 普通请求-响应方式:例如Servlet中HttpServletRequest和HttpServletResponse相互配合先接受请求.解析数据,再发出响应,处理完成后连接便断开了,没有数据的实 ...
- PC端和手机端页面的一丢丢区别
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- iOS中转义后的html标签如何还原
最近用swift做一个公司的小项目,遇到一个问题,就是通过api获取的html文本中的标签都已经被转义了, <p class="MsoNormal" align=" ...