博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[总结]数据结构(板子)
阅读量:4520 次
发布时间:2019-06-08

本文共 2588 字,大约阅读时间需要 8 分钟。

1 splay

1 void rotate(int o, int kind) { 2     int p = pre[o]; 3     ch[p][!kind] = ch[o][kind], pre[ch[o][kind]] = p; 4     ch[pre[p]][ch[pre[p]][1] == p] = o, pre[o] = pre[p]; 5     ch[o][kind] = p, pre[p] = o; 6 } 7 void splay(int o, int goal) { 8     while (pre[o] != goal) { 9         if (pre[pre[o]] == goal) rotate(o, ch[pre[o]][0] == o);10         else {11             int p = pre[o], kind = ch[pre[p]][0] == p;12             if (ch[p][kind] == o) rotate(o, !kind), rotate(o, kind);13             else rotate(p, kind), rotate(o, kind);14         }15     }16     if (goal == 0) root = o;17 }

2 Treap

1 void rotate(int &o, int kind) {2     int x = ch[o][!kind];3     ch[o][!kind] = ch[x][kind];4     ch[x][kind] = o;5     o = x;6 }

3 fhq_Treap

1 void split(int o, int keyy, int &x, int &y) { 2     if (!o) x = y = 0; 3     else { 4         if (key[o] <= keyy) x = o, split(ch[o][1], keyy, ch[o][1], y); 5         else y = o, split(ch[o][0], keyy, x, ch[o][0]); 6     } 7 } 8 int merge(int x, int y) { 9     if (!x || !y) return x+y;10     if (lev[x] < lev[y]) {11         ch[x][1] = merge(ch[x][1], y);12         return x;13     }else {14         ch[y][0] = merge(x, ch[y][0]);15         return y;16     }17 }

4 LCT

1 void rotate(int o, int kind) { 2     int p = pre[o]; 3     ch[p][!kind] = ch[o][kind], pre[ch[o][kind]] = p; 4     if (isrt[p]) isrt[o] = 1, isrt[p] = 0; 5     else ch[pre[p]][ch[pre[p]][1] == p] = o; 6     pre[o] = pre[p]; 7     ch[o][kind] = p, pre[p] = o; 8 } 9 void splay(int o) {10     push(o);11     while (!isrt[o]) {12         if (isrt[pre[o]]) rotate(o, ch[pre[o]][0] == o);13         else {14             int p = pre[o], kind = ch[pre[p]][0] == p;15             if (ch[p][kind] == o) rotate(o, !kind), rotate(o, kind);16             else rotate(p, kind), rotate(o, kind);17         }18     }19 }20 void access(int o) {21     int y = 0;22     while (o) {23         splay(o);24         isrt[ch[o][1]] = 1, isrt[ch[o][1] = y] = 0;25         o = pre[y = o];26     }27 }28 void makeroot(int o) {29     access(o), splay(o);30     rev[o] ^= 1, swap(ch[o][0], ch[o][1]);31 }32 void link(int x, int y) {33     makeroot(x); pre[x] = y;34 }35 void cut(int x, int y) {36     makeroot(x), access(y), splay(y);37     ch[y][0] = pre[x] = 0, isrt[x] = 1;38 }

5 左偏树

1 int merge(int a, int b) {2     if (!a || !b) return a+b;3     if (key[a] > key[b]) swap(a, b);4     ch[a][1] = merge(ch[a][1], b);5     if (dist[ch[a][0]] < dist[ch[a][1]]) swap(ch[a][0], ch[a][1]);6     dist[a] = dist[ch[a][1]]+1;7     return a;8 }

 

转载于:https://www.cnblogs.com/NaVi-Awson/p/8074444.html

你可能感兴趣的文章
【NOIP2005】【Luogu1046】陶陶摘苹果
查看>>
2018 “百度之星”程序设计大赛 - 初赛(A)P1001度度熊拼三角(贪心)
查看>>
算法(2)--排序算法
查看>>
分布式与集群理解之部署结构
查看>>
sublime text3 -- JavaScript Completions
查看>>
二、Django需要的知识点
查看>>
PCB新手值得一看《Protel使用中的问题》
查看>>
《Spring Boot实战》笔记(目录)
查看>>
Mongodb基础操作实践- -Mongodb Shell端
查看>>
命令模式——行为型模式(2)
查看>>
[转帖]Java 8新特性探究 前言
查看>>
什么是web框架之自定义
查看>>
unity里c# gc优化 -字符串
查看>>
.NET Core 获取配置文件appsettings.json 方法
查看>>
PHP文件上传与安全
查看>>
软件工程理论、方法与实践 需求工程读后感
查看>>
[转]SHSH, APTicket以及iOS降級
查看>>
收藏一个有效的求组合数的模板
查看>>
CodeForces - 608B
查看>>
18-面向对象之语法(3)
查看>>