模板题

  bzoj3224: Tyvj 1728 普通平衡树

 #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 pb push_back
#define mp make_pair
#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 >> ;
//***************************** const int maxn = ;
struct node {
int l, r, v, w, sz, rnd;
node () { l = r = v = w = sz = rnd = ; }
} tr[maxn];
int ndtot, root, ans; int read() {
int l = , s(); char ch = getchar_unlocked();
while (ch < '' || ch > '') { if (ch == '-') l = -; ch = getchar_unlocked(); }
while (ch >= '' && ch <= '') { s = (s << ) + (s << ) + ch - ''; ch = getchar_unlocked(); }
return l * s;
} void update(int &k) { tr[k].sz = tr[tr[k].l].sz + tr[k].w + tr[tr[k].r].sz; } void lturn(int &k) {
int t = tr[k].r; tr[k].r = tr[t].l; tr[t].l = k;
tr[t].sz = tr[k].sz; update(k); k = t;
} void rturn(int &k) {
int t = tr[k].l; tr[k].l = tr[t].r; tr[t].r = k;
tr[t].sz = tr[k].sz; update(k); k = t;
} void insrt(int &k, int x) {
if (k == ) {
k = ++ndtot;
tr[k].sz = tr[k].w = , tr[k].v = x, tr[k].rnd = rand();
return;
}
tr[k].sz++;
if (tr[k].v == x) tr[k].w++;
else if (x > tr[k].v) {
insrt(tr[k].r, x);
if (tr[tr[k].r].rnd < tr[k].rnd) lturn(k);
}
else {
insrt(tr[k].l, x);
if (tr[tr[k].l].rnd < tr[k].rnd) rturn(k);
}
} void del(int &k, int x) {
if (k == ) return;
if (tr[k].v == x) {
if (tr[k].w > ) {
tr[k].w--; tr[k].sz--; return;
}
if (tr[k].l * tr[k].r == ) k = tr[k].l + tr[k].r;
else if (tr[tr[k].l].rnd < tr[tr[k].r].rnd) rturn(k), del(k, x);
else lturn(k), del(k, x);
}
else if (x > tr[k].v) tr[k].sz--, del(tr[k].r, x);
else tr[k].sz--, del(tr[k].l, x);
} int query_rnk(int k, int x) {
if (k == ) return ;
if (tr[k].v == x) return tr[tr[k].l].sz + ;
else if (x > tr[k].v) return tr[tr[k].l].sz + tr[k].w + query_rnk(tr[k].r, x);
else return query_rnk(tr[k].l, x);
} int query_num(int k, int x) {
if (k == ) return ;
if (x <= tr[tr[k].l].sz) return query_num(tr[k].l, x);
else if (x > tr[tr[k].l].sz + tr[k].w) return query_num(tr[k].r, x - tr[tr[k].l].sz - tr[k].w);
else return tr[k].v;
} void query_pre(int k, int x) {
if (k == ) return;
if (x > tr[k].v) {
ans = tr[k].v; query_pre(tr[k].r, x);
}
else query_pre(tr[k].l, x);
} void query_sub(int k, int x) {
if (k == ) return;
if (x < tr[k].v) {
ans = tr[k].v; query_sub(tr[k].l, x);
}
else query_sub(tr[k].r, x);
} int main() {
int n; n = read();
while (n--) {
int op, x; op = read(), x = read();
switch(op) {
case : insrt(root, x); break;
case : del(root, x); break;
case : printf("%d\n", query_rnk(root, x)); break;
case : printf("%d\n", query_num(root, x)); break;
case : ans = ; query_pre(root, x); printf("%d\n", ans); break;
case : ans = ; query_sub(root, x); printf("%d\n", ans); break;
}
}
}

  bzoj1503: 郁闷的出纳员

    按理来说Treap保持平衡后是不能旋转的,然而这个题乱搞A了,把要查询的点旋转到根上然后干掉。。

 #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;
const int inf = ~0U>>;
const i64 INF = ~0ULL>>;
//**************************** const int maxn = ; struct node {
int l, r, v, rnd, w, sz;
node() { l = r = v = rnd = w = sz = ; }
} tr[maxn];
int ndtot, root;
void update(int k) { tr[k].sz = tr[tr[k].l].sz + tr[k].w + tr[tr[k].r].sz; }
void lturn(int &k) {
int t = tr[k].r; tr[k].r = tr[t].l; tr[t].l = k;
tr[t].sz = tr[k].sz; update(k); k = t;
}
void rturn(int &k) {
int t = tr[k].l; tr[k].l = tr[t].r; tr[t].r = k;
tr[t].sz = tr[k].sz; update(k); k = t;
} void insrt(int &k, int x) {
if (!k) {
k = ++ndtot;
tr[k].v = x, tr[k].rnd = rand(), tr[k].w = tr[k].sz = ;
return;
}
tr[k].sz++;
if (tr[k].v == x) tr[k].w++;
else if (x > tr[k].v) {
insrt(tr[k].r, x);
if (tr[tr[k].r].rnd < tr[k].rnd) lturn(k);
}
else if (x < tr[k].v) {
insrt(tr[k].l, x);
if (tr[tr[k].l].rnd < tr[k].rnd) rturn(k);
}
} int query_num(int &k, int x) {
if (!k) return ;
if (x <= tr[tr[k].l].sz) return query_num(tr[k].l, x);
else if (x > tr[tr[k].l].sz + tr[k].w) return query_num(tr[k].r, x - tr[tr[k].l].sz - tr[k].w);
else return tr[k].v;
} void fix(int &k, int x) {
if (!k) return;
if (tr[k].v >= x) {
fix(tr[k].l, x);
if (tr[k].l && tr[tr[k].l].v >= x) rturn(k);
}
else {
fix(tr[k].r, x);
if (tr[k].r && tr[tr[k].r].v >= x) lturn(k);
}
} char str[];
int main() {
int n, m;
scanf("%d%d", &n, &m);
int tot();
int be();
insrt(root, 0x3f3f3f3f);
while (n--) {
int x;
scanf("%s%d", str, &x);
if (str[] == 'I') { if (x >= m) insrt(root, x - tot), be++; }
else if (str[] == 'A') tot += x;
else if (str[] == 'S') {
tot -= x;
fix(root, m - tot);
tr[root].sz -= tr[tr[root].l].sz;
tr[tr[root].l] = node();
tr[root].l = ;
}
else {
if (x + > tr[root].sz) puts("-1");
else printf("%d\n", query_num(root, tr[root].sz - x) + tot);
}
}
printf("%d\n", be - tr[root].sz + );
return ;
}

Treap初步的更多相关文章

  1. BZOJ3786星系探索——非旋转treap(平衡树动态维护dfs序)

    题目描述 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为1号星球),其余的所有星球均有且仅有一个依赖星球.主星球没有依赖星球. ...

  2. 移动端之Android开发的几种方式的初步体验

    目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...

  3. fhq treap最终模板

    新学习了fhq treap,厉害了 先贴个神犇的版, from memphis /* Treap[Merge,Split] by Memphis */ #include<cstdio> # ...

  4. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

  5. Android自定义View初步

    经过上一篇的介绍,大家对于自定义View一定有了一定的认识,接下来我们就以实现一个图片下显示文字的自定义View来练习一下.废话不多说,下面进入我们的正题,首先看一下我们的思路,1.我们需要通过在va ...

  6. 初步认识Node 之Node为何物

    很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了.    Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...

  7. [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

    [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website develop ...

  8. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 786  Solved: 391[Submit][S ...

  9. BZOJ 1862: [Zjoi2006]GameZ游戏排名系统 [treap hash]

    1862: [Zjoi2006]GameZ游戏排名系统 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1318  Solved: 498[Submit][ ...

随机推荐

  1. HDU 1054 Strategic Game(树形DP)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. ElasticSearch — 集群搭建

    1.es需要java环境,故先检查java环境是否正常 2.下载elasticsearch安装包 http://www.elasticsearch.org/download/ 目前最新版本到1.4.0 ...

  3. 什么是Jsp

    1.什么是jsp java server page(java 服务器端页面技术),是 sun 公司制订的一种服务器端动态页面生成技术的规范. 因为直接使用 servlet 生成页面,如果页面比较复杂, ...

  4. Ubuntu 9.10+ apache2.2 +Django的配置

    1.首先安装mod_python apt-get install libapache2-mod-python2.6 (Ubuntu 9.10默认安装的是python 2.6版,如果是2.5可改为 li ...

  5. Java NIO的探究

    1.Java NIO与阻塞IO的区别 阻塞IO通信模型(在上一篇<J2SE网络编程之 TCP与UDP>博客中有所介绍) 我们知道阻塞I/O在调用InputStream.read()方法时是 ...

  6. ThinkPHP 框架执行流程分析

    总体来说,应用的流程涉及到几个文件:Index.phpThinkPHP.phpThink.class.phpApp.class.phpDispatcher.class.phpThinkPHP/Mode ...

  7. String转float

    float mTotalhour = Float.parseFloat(mTotalHourEt.getText().toString().trim());

  8. axis-运行bat报错问题

    仇玮浡说我的位置不对,我仔细一看,果然,端口号错了... 发现了 我以前用的都是8088 现在的tomcat是8080  看得到8088 没觉得奇怪.. 成功之后的样子 总结:多仔细检查配置文件,如果 ...

  9. nano编辑器的设置

    1.取消nano的默认编辑 自己的虚拟机ubuntu不知道怎么搞的,在添加定时任务的时候总是 编辑,一开始不知道,百度了以下这个是所谓的nano,在定时任务的时候总是默认出来,自己习惯了vi,nano ...

  10. ecos的model

    表->dbschema->model 虚拟化model机制 在dbschema存在model不存在的情况下 很多mvc结构都这么来 model命名规则 {$app_name}_mdl_{$ ...