模板题

  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. 配置Notepad++直接运行Python、Perl、C、C++、Java

    运行(F5),输入命令并保存 cmd /k python "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT cmd ...

  2. 转:Selenium2.0之grid学习总结

    (一)介绍: Grid的功能: 并行执行 通过一个中央管理器统一控制用例在不同环境.不同浏览器下运行 灵活添加变动测试机 (二)快速开始 这个例子将介绍如何使用selenium2.0的grid,并且注 ...

  3. STM32F2系列低功耗总结

    序号 运行状态 进入指令(stm32f2xx_pwr.c) 退出条件 状态 IO管脚状态 进一步降低功耗的措施 1 运行模式 上电/系统复位后的默认模式, HCLK驱动CPU运行代码 可通过指令 进入 ...

  4. 关于svn的安装问题

    直接把安装包放在 MyEclipse的安装目录下 如果 报错 那么就重装MyEclipse 半个小时左右就OK了不然调错太浪费时间了

  5. 手写js代码(一)javascript数组循环遍历之forEach

    注:原文地址http://blog.csdn.net/oscar999/article/details/8671546 我这里是仿照学习! 1.js的数组循环遍历 ①数组的遍历首先想到的是for()循 ...

  6. Best Grass

    Description Bessie is planning her day of munching tender spring grass and is gazing out upon the pa ...

  7. Apache下的FileUtils.listFiles方法简单使用技巧

    一.引言 Apache提供的很多工具方法非常好用,推荐. 今天在使用的过程中使用到了org.apache.commons.io.FileUtils.listFiles方法,本文主要谈谈这个工具方法的用 ...

  8. JS检测图片的大小

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...

  9. java fx example

    http://www.java2s.com/Tutorials/Java/JavaFX/1500__JavaFX_WebEngine.htm

  10. 圖片裁剪大頭貼功能 - ASP.NET WebForm + jQuery + imgAreaSelect

    系統操作環境: ASP.NET WebForm .NET Framework 4.0 (C#) jQuery 1.7.1 imgAreaSelect 0.9.8 目錄結構: 與之前使用ASP.NET ...