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公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经 ...
随机推荐
- unity 创建NGUI字体
1.NGUI -> Open -> Font Maker 打开FoontMaker窗口. 2.点Source选择.ttf字体,必须是中文命令,否则会出错. 3.点Custom单选按钮,输入 ...
- Linux学习 -- Shell编程 -- 字符处理命令
sort排序命令 sort [选项] 文件名 -f 忽略大小m写 -n 按数值型,默认字符串型 -r 反向 -t 指定分隔符 -k n[,m] 指定字段范围,默认行尾 eg. sort -n -t & ...
- 转:LoadRunner中参数化技术详解
LoadRunner中参数化技术详解 LoadRunner在录制脚本的时候,只是忠实的记录了所有从客户端发送到服务器的数据,而在进行性能测试的时候,为了更接近真实的模拟现实应用,对于某些信息需要每次提 ...
- h5移动端设计页面
@京东设计中心 :去年JDC出了不少优秀的武媚娘…不,H5呢,大家都很拼,同时当然也积累了一些经验和教训,今天结合咱们的实战案例,从字体,排版,动效,音效,适配性,想法这几个方面好好聊一聊关于H5的设 ...
- java的property
System.currentTimeMillis() 返回以毫秒为单位的当前时间.System.gc() 垃圾回收System.getProperties().返回当前的系统属性System.getP ...
- 服务器遭受 ssh 攻击
查看auth.log日志,差点吓一跳,好多攻击记录. vim /var/log/auth.log 才两天的功夫,900多万条记录, 一些解决应对的办法: 43down voteaccepted It ...
- 转:sqlplus与shell互相传值的几种情况
sqlplus与shell互相传值的几种情况 情况一:在shell中最简单的调用sqlplus $cat test.sh #!/bin/sh sqlplus oracle/oracle@oracle& ...
- (转)C++中返回对象的情形及RVO
http://www.cnblogs.com/xkfz007/archive/2012/07/21/2602110.html 之前有文章介绍过临时对象和返回值优化RVO方面的问题.见此处. 在C++中 ...
- 发布时去掉 debug 和 提醒日志,简单无侵入
在 proguard 文件中加入下面代码,让发布时去掉 debug 和 提醒日志,简单无侵入! -assumenosideeffects class android.util.Log { public ...
- POJ 3648 Wedding
2-SAT,直接选择新娘一侧的比较难做,所以处理的时候选择新郎一侧的,最后反着输出就可以. A和B通奸的话,就建边 A->B'以及B->A’,表示 A在新郎一侧的话,B一定不在:B在新郎一 ...