后缀数组的倍增算法 O(nlogn) / O(nlog2n) 算法介绍 ? 先根据字符串中字符的出现情况,给每一种字符一个对应的排名(从1开始),作为第一次排序的结果 ? 其后每一次,每个位置以当前排名作为主关键词,从1开始倍增步数,将对应的位置排名作为第二关键词 ? 于是根据主关键词与副关键词继续 ...
分类:
编程语言 时间:
2020-06-30 12:33:39
阅读次数:
56
```cpp const int MAX = 100000; vector G[MAXN + 5]; int dep[MAXN + 5], fa[MAXN + 5][20 + 1]; void dfs(int u, int p) { dep[u] = depth[p] + 1; fa[u][0] =... ...
分类:
编程语言 时间:
2020-02-16 12:55:01
阅读次数:
72
题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零。可是小A偏偏又有赖床的坏毛病。于是为了保住自己的工资,小A买了一个十分牛B的空间跑路器,每秒钟可以跑2^k千米(k是任意自然数)。当然,这个机器是用longint存的,所以总跑路长度不能超过ma ...
分类:
编程语言 时间:
2019-10-06 11:37:08
阅读次数:
79
倍增是枚举的一种特殊方式。 假如我们有一根数轴,要从1000走到0 我:一步步走就行了,一定会到的 ZHX:SB题,$2^9=512$,从1000跳512步,还剩488;$2^8=256$,从488跳256步,还剩232;$2^7=128$,从232跳128步,还剩104; $2^6=64$,从10 ...
分类:
编程语言 时间:
2019-09-27 01:41:20
阅读次数:
146
这个有两种方法: 一、倍增 就是维护一个节点的第$2^0,\ 2^1,\ 2^2\ ...$层父亲,这样的话我们在后面查询的时候就可以直接“跳”着找。 第二行相当于将$dep(x) dep(y)$的值做 二进制拆分 。 跳到同一深度之后,如果两个节点已经跳到同一个位置,就直接退出。 否则,就要继续 ...
分类:
编程语言 时间:
2019-08-01 16:01:55
阅读次数:
101
#include #include #include #define LL long long #define ULL unsigned long long using namespace std; const int MAXN=100010; //以下为倍增算法求后缀数组 int wa[MAXN]... ...
分类:
编程语言 时间:
2019-07-02 19:40:44
阅读次数:
120
【模板】RMQ问题的ST表实现 RMQ问题:给定一个长度为N的区间,M个询问,每次询问[Li,Ri]这段区间元素的最大值/最小值。 RMQ的高级写法一般有两种,即为线段树和ST表。 本文主要讲解一下ST表的写法。(以区间最大值为例) ST表:一种利用dp思想求解区间最值的倍增算法。 定义:f(i,j ...
分类:
其他好文 时间:
2019-01-26 16:21:14
阅读次数:
192
(〇)前置知识 1.排序 最好会 基数排序 ,实在不行可以快速排序 (倍增算法的时间复杂度会从$\Theta (n\log n)~\to~\Theta (n\log^2 n)$) 2.字符串 后缀 这个大家应该都知道,比方说有一个字符串$a~b~c~d~e~f$,那么它的后缀就是: 后缀1: $a~ ...
分类:
编程语言 时间:
2019-01-19 18:44:27
阅读次数:
207
<题目链接> 题目大意: 给出一棵树,问任意两个点的最近公共祖先的编号。 解题分析:LCA模板题,下面用的是在线倍增算法求解。 2018-10-18 ...
分类:
其他好文 时间:
2018-10-19 02:17:52
阅读次数:
167
LCA(最近公共祖先).....可惜我只会用tarjan去做 真心感觉tarjan算法要比倍增算法要好理解的多,可能是我脑子笨吧略略略 最近公共祖先概念:在一棵无环的树上寻找两个点在这棵树上深度最大的公共的祖先节点,也就是离这两个点最近的祖先节点。 最近公共祖先的应用:求解两个有且仅有一条确定的最短 ...
分类:
编程语言 时间:
2018-09-25 23:02:47
阅读次数:
206