上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 18 下一页
摘要: 后缀排序 我的字符串全部都是下标从1开始的, 千万要小心。 字符串 \(s[1, n]\) 中,有 \(n\) 个后缀,他们分别是 \(s[1, n], s[2, n], s[3, n], ..., s[i, n], ..., s[n, n]\) 。 对这 \(n\) 个后缀进行排序,由于他们长度不 阅读全文
posted @ 2021-01-17 18:49 purinliang 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 凯莱定理:n个点的完全图的生成树有n^(n-2)个。 长度为n-2,值域为[1,n]的Prufer序列和一个n个节点编号分别为[1,n]的无向连通图的生成树双射。 无根树变Prufer:每次选择一个编号最小的叶子删除他,在序列中记录其父亲,直到剩下最后的两个点。(假如再做一步,则Prufer序列一定 阅读全文
posted @ 2021-01-17 18:39 purinliang 阅读(120) 评论(0) 推荐(0) 编辑
摘要: Euler函数的定义:小于等于n的与n互质的正整数的个数,或者小于n的与n互质的自然数的个数。这两个结果都是指向 \(gcd(0,1)=1\) 也就是说 \(\varphi(1)=1\) 。 \(\varphi(p)=p-1\) \(\varphi(p^k)=p^k-p^{k-1}=p^{k-1}( 阅读全文
posted @ 2021-01-17 14:49 purinliang 阅读(964) 评论(0) 推荐(0) 编辑
摘要: 可持久化的单点修改线段树,同时也是可持久化数组 验证:https://www.luogu.com.cn/problem/P3919 ver[u]表示版本u的线段树根的位置。 所有的public操作都产生一个新的版本。 Build的时候生成不超过2n个节点,每次修改生成不超过logn个节点。 MAXM 阅读全文
posted @ 2021-01-17 05:37 purinliang 阅读(75) 评论(0) 推荐(0) 编辑
摘要: 一个数有原根时,有 \(\varphi(\varphi(m))\) 个原根。 有原根的充要条件是, \(m=2,4,p^n,2p^n\) 其中p是奇质数。 求一个最小的原根,从 \(1\) 枚举到 \(m^{0.25}\) ,然后若 \(gcd(i,m)=1\) 并且对于 \(\varphi(m)\ 阅读全文
posted @ 2021-01-16 22:39 purinliang 阅读(703) 评论(0) 推荐(0) 编辑
摘要: 事实上是并查集套一个可持久化数组。 int a[100005]; struct SegmentTree { #define ls lch[o] #define rs rch[o] static const int MAXN = 1e5 + 10; static const int MAXM = 2e 阅读全文
posted @ 2021-01-16 10:56 purinliang 阅读(88) 评论(0) 推荐(0) 编辑
摘要: 算法的原理:把dfs的点分为三类: vis[u]=0 表示这个点从未访问 vis[u]=1 表示这个点在栈中,是u点的祖先 vis[u]=2 表示这个点已经退栈 Tarjan算法把lca(x,y)的查询丢给x和y的查询数组记录。后序遍历,总是会先遍历y再遍历x,那么vis[y]=2,要么x是y的祖先 阅读全文
posted @ 2021-01-16 09:06 purinliang 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 适用于无向图。其实找出来的是一片最小生成森林来的,并不一定是树,取决于原图是否连通。 int n, m; const int MAXM = 200000 + 10; struct DisjointSet { static const int MAXN = 200000 + 10; int fnd[M 阅读全文
posted @ 2021-01-15 21:47 purinliang 阅读(86) 评论(0) 推荐(0) 编辑
摘要: #include <bits/stdc++.h> using namespace std; typedef unsigned int uint; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> 阅读全文
posted @ 2021-01-12 15:45 purinliang 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 尽量只对无符号数使用移位运算 右移:丢弃最低位,向下取整,(-1>>1的结果是-1) 左移:有符号数 位运算的优先级,除了取反符高于算术运算符,其他符号都低于算术运算符。 其中& | ^的优先级甚至低于比较运算符。 判断是否是二的非负整数次幂: bool isPowerOfTwo(int n) { 阅读全文
posted @ 2021-01-12 04:59 purinliang 阅读(197) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 18 下一页