模板题

  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. POJ - 3062 Borg Maze

    题目链接:http://poj.org/problem?id=3026 Svenskt Masterskap我程序员/ Norgesmesterskapet 2001 Description The ...

  2. Dev之ChartControl控件(一)

    ChartControl控件主要包括Chart Title,Legend,Annotations,Diagram,Series五部分:如图: 1.  用RangeControl控件控制ChartCon ...

  3. Reverse complement DNA

    用法:python rev_comp.py input.fa out.fa 输入文件为 fasta 格式文件,若输入文件中序列的 header 有 '+' 或 '-' 号标记正负链,则带有 '+' 的 ...

  4. 第19章 网络通信----UDP程序设计基础

    用户数据报协议(UDP)是网络信息传输的另一种形式. 基于UDP通信的基本模式如下: (1)将数据打包(称为数据包),然后将数据包发往目的地. 发送数据包: 使用DatagramSocket()创建一 ...

  5. Developing Backbone.js Applications

    https://addyosmani.com/backbone-fundamentals/

  6. 关于sqlserver还原不了数据库的原因

    因为备份文件需要在服务器上打成压缩包,才能进行传输,不然会丢失数据..

  7. Hadoop: failed on connection exception: java.net.ConnectException: Connection refuse

    ssh那些都已经搞了,跑一个书上的例子出现了Connection Refused异常,如下: 12/04/09 01:00:54 INFO ipc.Client: Retrying connect t ...

  8. php示例代码

    11111<?php $var = 'ABCDEFGH:/MNRPQR/'; echo "Original: $var<hr />\n"; /* 这两个例子使用 ...

  9. WebDriver(Selenium2) 判断页面是否刷新的方法

    http://uniquepig.iteye.com/blog/1568208 public static boolean waitPageRefresh(WebElement trigger) { ...

  10. JSDOM优化

    JS操作DOM,就像从一个岛到另外一个岛,过桥的时候,每次都要收取过桥费,尽量减少过桥的次数.列如:   for循环插入到页面5000个LI:  应该 先用一个变量存 5000个li,然后一次插入. ...