如题,这是一个模板。。。

 #include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cctype> inline void read(int & x)
{
x = ;
int k = ;
char c = getchar();
while (!isdigit(c))
if (c == '-') c = getchar(), k = -;
else c = getchar();
while (isdigit(c))
x = (x << ) + (x << ) + (c ^ ),
c = getchar();
x *= k;
} const int MAXN = ;
int seed = ;
int m, x, tot, opt, rt = ;
int siz[MAXN], val[MAXN], rnd[MAXN], son[MAXN][]; inline int Rand()
{
return seed = (int)seed * 482711LL % ;
} inline void Pushup(int u)
{
siz[u] = siz[son[u][]] + siz[son[u][]] + ;
} inline int New(int x)
{
siz[++tot] = ;
val[tot] = x;
rnd[tot] = Rand();
son[tot][] = son[tot][] = ;
return tot;
} inline void Split(int u, int x, int &a, int &b)
{
if (!u) { a = b = ; return; }
if (val[u] <= x) a = u, Split(son[u][], x, son[a][], b);
else b = u, Split(son[u][], x, a, son[b][]);
Pushup(u);
} inline void Split_siz(int u, int k, int &a, int &b)
{
if (!u) { a = b = ; return; }
if (k <= siz[son[u][]]) b = u, Split_siz(son[u][], k, a, son[b][]);
else a = u, Split_siz(son[u][], k - siz[son[u][]] - , son[a][], b);
Pushup(u);
} inline void Merge(int & u, int a, int b)
{
if (!a || !b) { u = a | b; return; }
if (rnd[a] < rnd[b]) u = a, Merge(son[u][], son[a][], b);
else u = b, Merge(son[u][], a, son[b][]);
Pushup(u);
} inline int Findkth(int u, int k)
{
while (siz[son[u][]] + != k)
if (siz[son[u][]] >= k) u = son[u][];
else k -= siz[son[u][]] + , u = son[u][];
return u;
} inline void Insert(int x)
{
int a = , b = , c = ;
c = New(x);
Split(rt, x, a, b);
Merge(a, a, c);
Merge(rt, a, b);
} inline void Delete(int x)
{
int a = , b = , c = ;
Split(rt, x, a, b);
Split(a, x - , a, c);
Merge(c, son[c][], son[c][]);
Merge(a, a, c);
Merge(rt, a, b);
} inline void Getrank(int x)
{
int a = , b = ;
Split(rt, x - , a, b);
printf("%d\n", siz[a] + );
Merge(rt, a, b);
} inline void Getkth(int k)
{
int a = , b = , c = ;
//·½·¨1£ºÓú¯ÊýÄõÚk´ó
printf("%d\n", val[Findkth(rt, k)]);
return; //·½·¨2£º°´siz·ÖÁÑÄóöc
Split_siz(rt, k, a, b);
Split_siz(a, k - , a, c);
printf("%d\n", val[c]);
Merge(a, a, c);
Merge(rt, a, b);
} inline void Pre(int x)
{
int a = , b = ;
Split(rt, x - , a, b);
printf("%d\n", val[Findkth(a, siz[a])]);
Merge(rt, a, b);
} inline void Suf(int x)
{
int a = , b = ;
Split(rt, x, a, b);
printf("%d\n", val[Findkth(b, )]);
Merge(rt, a, b);
} signed main()
{
read(m);
for (int i = ; i <= m; ++i)
{
read(opt), read(x);
if (opt == ) Insert(x);
if (opt == ) Delete(x);
if (opt == ) Getrank(x);
if (opt == ) Getkth(x);
if (opt == ) Pre(x);
if (opt == ) Suf(x);
}
return ;
}

【模板】无旋Treap(FHQ)的更多相关文章

  1. 模板 - 无旋Treap

    一般而言作为一棵平衡树只需要插入,删除,值求排名,排名求值,前驱,后继,六个接口. #include<bits/stdc++.h> using namespace std; typedef ...

  2. [模板] 无旋Treap (C++ class)

    注意!本帖不是算法介绍!只是贴代码(逃) //嫌stdlib的rand太慢,手打了一个 /* Author: hotwords */ typedef unsigned int tkey; class ...

  3. 模板——无旋Treap

    #include "bits/stdc++.h" using namespace std; inline int read(){ ,k=;char ch=getchar(); :, ...

  4. fhq Treap(无旋Treap)

    先吹一波fhq dalao,竟然和我一个姓,我真是给他丢脸. 昨天treap就搞了一下午,感觉自己弱爆了.然后今天上午又看了一个上午的无旋treap再次懵逼,我太弱了,orzorz. 所以写个博客防止 ...

  5. 无旋treap的简单思想以及模板

    因为学了treap,不想弃坑去学splay,终于理解了无旋treap... 好像普通treap没卵用...(再次大雾) 简单说一下思想免得以后忘记.普通treap因为带旋转操作似乎没卵用,而无旋tre ...

  6. 模板 - 数据结构 - 可持久化无旋Treap/PersistentFHQTreap

    有可能当树中有键值相同的节点时,貌似是要对Split和Merge均进行复制的,本人实测:只在Split的时候复制得到了一个WA,但只在Merge的时候复制还是AC,可能是恰好又躲过去了.有人说假如确保 ...

  7. 洛谷 - P3391 【模板】文艺平衡树(Splay) - 无旋Treap

    https://www.luogu.org/problem/P3391 使用无旋Treap维护序列,注意的是按顺序插入的序列,所以Insert实际上简化成直接root和Merge合并,但是假如要在序列 ...

  8. Luogu 3369 / BZOJ 3224 - 普通平衡树 - [无旋Treap]

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3224 https://www.luogu.org/problemnew/show/P3 ...

  9. HNOI2012 永无乡 无旋Treap

    题目描述 永无乡包含 nnn 座岛,编号从 111 到 nnn ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 nnn 座岛排名,名次用 111 到 nnn 来表示.某些岛之间由巨大的桥连接, ...

  10. 浅谈无旋treap(fhq_treap)

    一.简介 无旋Treap(fhq_treap),是一种不用旋转的treap,其代码复杂度不高,应用范围广(能代替普通treap和splay的所有功能),是一种极其强大的平衡树. 无旋Treap是一个叫 ...

随机推荐

  1. ignoring option MaxPermSize=256m; support was removed in 8.0 - unsupported JVM property

    MaxPermSize 在JVM8 中已经被删除. 可以使用 JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MaxPermSize=256m 参考 https://b ...

  2. java CDI

    Scope声明周期 http://www.cnblogs.com/yjmyzz/p/javaee-cdi-bean-scope.html

  3. 事务&数据库连接池&DBUtils

    事务的特性 原子性 指的是 事务中包含的逻辑,不可分割. 一致性 指的是 事务执行前后.数据完整性 隔离性 指的是 事务在执行期间不应该受到其他事务的影响 持久性 指的是 事务执行成功,那么数据应该持 ...

  4. Net Core WebApi几种版本控制对比

    Net Core WebApi几种版本控制对比 一.版本控制的好处: (1)有助于及时推出功能, 而不会破坏现有系统. (2)它还可以帮助为选定的客户提供额外的功能. API 版本控制可以采用不同的方 ...

  5. HDU 1069 Monkey and Banana DP LIS变形题

    http://acm.hdu.edu.cn/showproblem.php?pid=1069 意思就是给定n种箱子,每种箱子都有无限个,每种箱子都是有三个参数(x, y, z)来确定. 你可以选任意两 ...

  6. (转)linux dumpe2fs命令

    linux dumpe2fs命令 命令名称 dumpe2fs - 显示ext2/ext3/ext4文件系统信息. dumpe2fs命令语法 dumpe2fs [ -bfhixV ] [ -o supe ...

  7. setTimout( , 0) 详解

    setTimout( , 0) 一.前言 前端工程师们工作久了,一般都会在某些地方看见过这样的代码: setTimeout(function(){ // TODO }, 0); 举个实例,移动端我们经 ...

  8. 用TextWriterTraceListener实现建议log文件记录

    log4net之类3方组件确实很方便,但是想写个小小的demo之类的程序,有点用不起啊. 微软自带的TraceListener要实现一个简易的日志帮助类还是很简单的,直接上代码,自己备用,也希望对同样 ...

  9. asp.net重启web应用程序域

    我把加载到static静态变量中了,是在数据库中存的,这样每次改了一下必须要重启一下web应用程序,每次去iis操作太麻烦了,于是找的了这个重启的办法,一句话代码: System.Web.HttpRu ...

  10. 【Java】 jar解压与压缩

    jar解压与压缩 命令格式:jar {c t x u f }[ v m e 0 M i ][-C 目录]文件名 # 解压,到当前目录 jar -xvf source.jar # 打包,不进行压缩 ja ...