随笔分类 - 学习笔记
摘要:数论分块 对于含有除法向下取整的式子,可以使用数论分块,将 $\left \lfloor \frac{n}{i} \right \rfloor$ 相同的数统一计算。 使式子 $\left \lfloor \frac{n}{i} \right \rfloor = \left \lfloor \frac
阅读全文
摘要:最大公约数 欧几里得算法 对于两个数 $a,b$,设 $a>b$,当 $a%b==0$ 时,答案为 $b$。 否则,设 $a=b*q+r,r<b$,则 $gcd(a,b)=gcd(b,a%b)$ ,时间复杂度 $O(\log N)$ 递归写法 int gcd(int x,int y){ return
阅读全文
摘要:积性函数 若函数 $f(1)=1$,并且对于 $gcd(x,y)=1,f(xy)=f(x)*f(y)$,则 $f(i)$ 为积性函数。 若函数 $f(1)=1$,并且 $f(xy)=f(x)*f(y)$,则 $f(i)$ 为完全积性函数。 除数函数,欧拉函数为积性函数。 判断单个素数 inline
阅读全文
摘要:无旋treap的核心操作时分裂与合并,分裂分为按值分裂和按排名分裂,按值分裂用于维护权值平衡树,按排名分裂用于维护序列。 按值分裂平衡树。 struct Treap{ struct tree{ int l,r,v,p/*随机值*/,w; }t[N]; int tot,root,INF=0x7ffff
阅读全文
摘要:树上启发式合并,$DSU$ $On$ $Tree$,静态链分治,用于求解支持离线的树上子树查询问题。 暴力做法,每次做完一棵树就要把它清空,避免对它兄弟造成影响,但是做到它的祖先时又会重新对它做一遍,发现最后一棵树是不需要清空的,于是考虑将节点数最多的留到最后。 首先对树进行轻重链剖分,找出重儿子,
阅读全文
摘要:标准库: 1.栈$stack$ top()//取栈顶元素 push()//压入元素 emplace()//压入元素至栈顶 s1.swap(s2)//交换两个栈 size()//栈中元素个数 empty()//判空 pop()//弹出栈顶元素 =,!=,==,>,<,>=,<= 2.队列$queue$
阅读全文
摘要:最短路径树,即$Shortest$ $Path$ $Tree$,对于一张无向图,固定一个源点,树上每个点到源点的最短距离都等于原图中该点到源点的最短距离。 最短路径树是所有路径树中边权和最小的。 通常使用$dijkstra$算法来找出$SPT$,在每次松弛操作时,如果松弛成功,记该点的前驱边的编号,
阅读全文
摘要:模拟退火(Simulate Anneal)是一种通用概率演算法,在大的搜索空间内寻找最优解,若新的状态优于当前状态,则将新的状态作为最优解,否则以一定概率接受新的状态。 模拟退火有三个因数,初始温度$T_0$,降温系数$d$,终止温度$T_k$,通常不直接取当前解为最优解,而是维护退火过程中遇到的所
阅读全文
摘要:前缀函数nxt[i]表示s[0...i]最长相等的真前缀与真后缀的长度。 i-nxt[i]即为s[0...i]的一个周期。 前缀函数求法,j代表的时长度。 下标从0开始。 for(int i=1,j=0;i<n;i++){/*j最次也是前一位的nxt,从前一位失配的位置开始匹配,后缀与前缀不等时一直
阅读全文
摘要:树状数组每个点管理的区间是$[i-lowbit(i)+1,i]$,一般用单点修改区间查询问题。 单点修改区间查询树状数组。 struct BinaryIndexedTree{ int t[N]; inline int lowbit(int x){ return x&-x; } inline void
阅读全文
摘要:可持久化线段树,又称主席树,通常用于维护序列和值域。 对于单点修改的可持久化线段树,它主要的思想就是每次新建一个版本,复制一条链。 单点修改和查询历史版本。不能再用$lc$和$rc$记录根节点的左右子树,需要用变量来记录,每次修改最多复制$O(logN)$的链。 struct PersistentS
阅读全文

浙公网安备 33010602011771号