Fhq-Treap 模板
namespace Fhq_Treap {
int ch[N][3], siz[N], val[N], cnt, rnd[N];
inline void update(int x);
inline int newnode(int x);
inline int Kth(int now, int k);
inline void split(int now, int k, int &x, int &y);
inline int merge(int A, int B);
inline void insert(int a);
inline void Delete(int a);
inline int find_rank(int a);
inline int find_Kth(int a);
inline int find_pre(int a);
inline int find_nxt(int a);
}
namespace Fhq_Treap {
inline void update(int x) { siz[x] = 1 + siz[ch[x][0]] + siz[ch[x][1]]; }
inline int newnode(int x) {
val[++cnt] = x; siz[cnt] = 1;
rnd[cnt] = rand();
return cnt;
}
inline int Kth(int now, int k) {
while (1) {
if (k <= siz[ch[now][0]])now = ch[now][0];
else if (k == siz[ch[now][0]] + 1)return now;
else k -= siz[ch[now][0]] + 1, now = ch[now][1];
}
}
inline void split(int now, int k, int &x, int &y) {
if (now == 0) {
x = y = 0;
return ;
}
if (val[now] <= k) {
x = now; split(ch[now][1], k, ch[now][1], y);
} else {
y = now; split(ch[now][0], k, x, ch[now][0]);
}
update(now);
}
inline int merge(int A, int B) {
if (!A || !B)return A + B;
else if (rnd[A] < rnd[B]) {
ch[A][1] = merge(ch[A][1], B);
update(A); return A;
} else {
ch[B][0] = merge(A, ch[B][0]);
update(B); return B;
}
}
inline void insert(int a) {
split(root, a, x, y);
root = merge(merge(x, newnode(a)), y);
}
inline void Delete(int a) {
split(root, a, x, z);
split(x, a - 1, x, y);
y = merge(ch[y][0], ch[y][1]);
root = merge(merge(x, y), z);
}
inline int find_rank(int a) {
split(root, a - 1, x, y);
int ret = siz[x] + 1;
root = merge(x, y);
return ret;
}
inline int find_Kth(int a) { return val[Kth(root, a)]; }
inline int find_pre(int a) {
split(root, a - 1, x, y);
int ret = val[Kth(x, siz[x])];
root = merge(x, y);
return ret;
}
inline int find_nxt(int a) {
split(root, a, x, y);
int ret = val[Kth(y, 1)];
root = merge(x, y);
return ret;
}
}
作者:Aonynation
出处:https://www.cnblogs.com/Oier-GGG/p/16542356.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库