Splay初步【bzoj1503】
做了一道水题,把bzoj1503用Splay重新写了一下。
#include <bits/stdc++.h>
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define REP(i, a, b) for (int i = a; i < b; i++)
#define drep(i, a, b) for (int i = a; i >= b; i--)
#define mp make_pair
#define pb push_back
#define clr(x) memset(x, 0, sizeof(x))
#define xx first
#define yy second
using namespace std;
typedef long long i64;
typedef pair<int, int> pii;
const int inf = ~0U >> ;
const i64 INF = ~0ULL >> ;
//*************************** struct node {
node *pre, *s[];
int key, size, mul;
node() { pre = s[] = s[] = ; size = mul = ; }
node(int _key) :key(_key) { pre = s[] = s[] = ; size = mul = ; }
bool getlr() { return pre->s[] == this; }
node *link(int w, node *p) { s[w] = p; if (p) p->pre = this; return this; }
void update() { size = mul + (s[] ? s[]->size : ) + (s[] ? s[]->size : ); }
} *root;
void rot(node* p) {
node *q = p->pre->pre;
p->getlr() ? p->link(, p->pre->link(, p->s[])) : p->link(, p->pre->link(, p->s[]));
p->pre->update();
if (q) q->link(q->s[] == p->pre, p);
else { p->pre = ; root = p; }
}
void splay(node *p, node *tar) {
while (p->pre != tar && p->pre->pre != tar)
p->getlr() == p->pre->getlr() ? (rot(p->pre), rot(p)) : (rot(p), rot(p));
if (p->pre) rot(p);
p->update();
}
void insrt(int k) {
node *p = root, *q = NULL;
while (p) {
q = p;
if (k > p->key) p = p->s[];
else if (k < p->key) p = p->s[];
else break;
}
if (!p) {p = new node(k);
if (!q) { root = p; return; }
q->link(q->key < k, p); q->update(); splay(p, );
}
else { p->mul++; splay(p, ); }
}
node *findkth(int x) {
node *p = root;
node *t;
while () {
int w = (p->s[] ? p->s[]->size : );
if (x <= w) t = p->s[];
else if (x > w + p->mul) { x -= w + p->mul; t = p->s[]; }
else break;
p = t;
}
splay(p, ); return p;
} node *find(node *p, int x) {
if (p->key < x) return find(p->s[], x);
else if (p->key > x) return find(p->s[], x);
else return p;
} int main() {
int ori();
int n, m;
scanf("%d%d", &n, &m);
int tot();
char op[]; int x;
while (n--) {
scanf("%s%d", op, &x);
if (op[] == 'I') {
if (x >= m) {
ori++;
insrt(x - tot);
}
}
else if (op[] == 'A') tot += x;
else if (op[] == 'S') {
tot -= x;
insrt(m - tot - );
splay(find(root, m - tot - ), );
root = root->s[];
if (root) root->pre = ;
}
else if (op[] == 'F') {
if (!root || x > root->size) puts("-1");
else printf("%d\n", findkth(root->size - x + )->key + tot);
}
}
printf("%d\n", ori - (root ? root->size : ));
return ;
}
Splay初步【bzoj1503】的更多相关文章
- BZOJ1503 [NOI2004]郁闷的出纳员 splay
原文链接http://www.cnblogs.com/zhouzhendong/p/8086240.html 题目传送门 - BZOJ1503 题意概括 如果某一个员工的工资低于了min,那么,他会立 ...
- 【题解】 bzoj1503: [NOI2004]郁闷的出纳员 (Splay)
bzoj1503,懒得复制,戳我戳我 Solution: 我知不知道我是那根筋抽了突然来做splay,调了起码\(3h+\),到第二天才改出来(我好菜啊),当做训练调错吧 一个裸的splay,没啥好说 ...
- 【BZOJ1503】 [NOI2004]郁闷的出纳员 splay
splay模板题,都快把我做忧郁了. 由于自己调两个坑点. 1.删除时及时updata 2.Kth 考虑k满足该点的条件即r->ch[1]->size+1<=k && ...
- Splay的初步学习
具体是啥,qwq 有时间再补吧,贴一下代码: #include<iostream> #include<cstdio> #include<cstring> #incl ...
- bzoj1503 Splay 维护名次数,支持删除
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 题解: 维护一颗Splay和一个外部变量,树中每个节点表示一个人,节点权值a + 外部变 ...
- bzoj1503[NOI2004]郁闷的出纳员——Splay
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1503 好奇怪呀!为什么而TLE? 各种修改终于卡时过了.可是大家比我快多了呀?难道是因为自己 ...
- bzoj1503 郁闷的出纳员 splay版
自己yy的写法 可能有点奇怪吧 详情看代码 还是蛮短的 #include<cstdio> #include<cstring> #include<algorithm> ...
- [BZOJ1503]郁闷的出纳员(Splay)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- BZOJ1503: [NOI2004]郁闷的出纳员(Splay)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经 ...
随机推荐
- pat L1-006. 连续因子
L1-006. 连续因子 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个正整数N的因子中可能存在若干连续的数字.例如630 ...
- 学习笔记——享元模式Flyweight
Flyweight模式提供对象的复用. FlyweightFactory类似工厂模式中的工厂,生成对象并提供. 区别在于,享元的工厂会记录生成的对象,当第二次请求到相同的对象时,享元不会再生成一个新对 ...
- html标签中head中两个标签的作用
<meta name="render" content="webkit"> //浏览器使用急速模式打开 <meta http-equi ...
- 转:Emmet 学习之路 - 2 基本语法
http://blog.csdn.net/jizhongchun/article/details/8472755 导读:Emmet的基本语法.学习步骤是:1 基本语法: 2 html命令: 3 css ...
- stock 当天盘势
看盘 (一)怎样看大盘当天的指数收阴.收阳 投资者每天都看大盘,但多数人看不准大盘.大盘到底当天是收阴,还是收阳?我通过很长时间的记录.验证,发现大盘在正常时间内,收阴.收阳是有规律的.我判断的准确率 ...
- java thread park
http://agapple.iteye.com/blog/970055 apidoc中说,park/unpark用来阻塞/激活线程,但是没有弃用方法suspend/resume的缺点,suspend ...
- 转 如何高效使用和管理Bitmap--图片缓存管理模块的设计与实现
上周为360全景项目引入了图片缓存模块.因为是在Android4.0平台以上运作,出于惯性,都会在设计之前查阅相关资料,尽量避免拿一些以前2.3平台积累的经验来进行类比处理.开发文档中有一个 Bitm ...
- iOS之tabbar图片去除渲染以及字体颜色统一配置
转发:http://www.cnblogs.com/qianLL/p/5521228.html 方式一 代码实现 这种要写很多代码 ,每个控制器都要写 UIImage *image=[UII ...
- src和href的区别
<html><!--头部标签--><!--src和href的区别src:引用,该资源是页面不可缺少的一部分,如(img标签 video标签 radio标签);href:引 ...
- li里元素都浮动 li 在IE6 7 下方会产生4px间隙问题
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...