笔记
文章平均质量分 61
Gary_2005
这个作者很懒,什么都没留下…
展开
-
算法记录005 :动态序列的分块和可持久化分块
实用算法005 :动态序列的分块 众所周知,分块一般是将序列没n\sqrt nn分成一块,总共n\sqrt nn块的算法。 但是这一般只可以处理静态序列。 考虑一个问题,但是有的操作可能可以改变序列的样子,比如将一段区间左移多少或向右移动多少,还有区间赋值,然后再维护一个sum,max,min……之类的。一般分块就做不了了(不过可持久化treap可以) 不过我们可以用一下这个技巧来分块: 我们先将原来的序列每n\sqrt nn个分一块,然后每次操作的时候可能会包含两个非整块,我们直接将那两个非整块切开原创 2021-01-08 18:20:43 · 271 阅读 · 0 评论 -
实用算法 004: 矩阵树(Matrix Tree)和其扩展
实用算法 004: 矩阵树(Matrix Tree)和其扩展 推荐知乎好文 矩阵树可以计算一个无向图的生成树个数或有向图的根向生成树和叶向生成树的个数。 由于有向图不怎么用到,下面只讨论无向图的情况。 注意:无向图可以存在重边,但不能存在自环 在下面的内容中默认N是点数,M是边数 定义1. 邻接矩阵MMM,其中Mi,jM_{i,j}Mi,j表示i,ji,ji,j之间的边数。可以发现MMM是一个对称且对角线是000的NNN阶矩阵。 定义2. 度数矩阵DDD,其中Di,iD_{i,i}Di,i表示iii的原创 2021-01-06 18:53:05 · 300 阅读 · 0 评论 -
实用算法 003:高斯消元算多项式乘法
实用算法 003:高斯消元算多项式乘法 众所周知ntt/fft是目前已知的时间复杂度最优的多项式乘法算法。 那为什么我们还需要知道这个方法呢? 考虑这个问题: 有nnn个多项式p1,p2,p3...pnp_1,p_2,p_3...p_np1,p2,p3...pn。和一个目标多项式qqq,初始q=1q=1q=1 有qqq次操作:mul imul\ imul i。 表示令q=q×piq=q\times p_iq=q×pi。 最后输出qqq的前aaa次项系数。(保证乘法过程中大于a原创 2021-01-06 18:50:46 · 238 阅读 · 0 评论 -
实用算法 001:用多项式的逆优化dp总结
用多项式的逆优化dp总结 考虑一个经典的模型: dpi=∑j=1idpi−j×fjdp_i=\sum_{j=1}^i dp_{i-j}\times f_jdpi=∑j=1idpi−j×fj 求dpndp_ndpn 这种问题表面看上去需要n2n^2n2,但是事实上可以更优。 我们建立一个长度无穷大的多项式:F(x)=∑i=0∞fi×xiF(x)=\sum _{i=0}^\infty f_{i}\times x^iF(x)=∑i=0∞fi×xi,特殊的:f0=fk+n=0,k∈N∗f_{原创 2020-12-31 23:43:48 · 309 阅读 · 0 评论 -
实用算法 002: SAM 上的根号暴力
实用算法 002: SAM 上的根号暴力 题目 看到了这个神仙代码:code 他对于每一个每一个SAM上的节点都暴力跳上去。这样猛然一看不是非常对,但是仔细分析一波,这是一个非常优美的根号暴力。 proof:proof:proof: 设当前考虑字符串sis_isi,每次向上跳可以补充不漏的跳出每一个子串,也就是最多O(∣si∣2)O(|s_i|^2)O(∣si∣2)次,但是这是非常不满的,因为也不太好构造SAM上每一个节点只对应一个串。但是总共跳的次数肯定也是≤O(N)\leq O(N)≤O(N)的(对原创 2021-01-06 12:46:20 · 316 阅读 · 0 评论 -
dp on 凸壳总结&gym 101806 T Touch The Sky 题解
dp on 凸壳总结&gym 101806 T Touch The Sky 题解 我也不知道这个玩意究竟叫什么。。。。 对于这样的dp问题: dpi,j=min(dpi−1,j,dpi−1,j−1+wi)dp_{i,j}=\min (dp_{i-1,j},dp_{i-1,j-1}+w_i)dpi,j=min(dpi−1,j,dpi−1,j−1+wi),(for example :Touch The Sky) 求任意的dpi,jdp_{i,j}dpi,j。 可以发现dpidp_{i}d原创 2020-11-10 23:51:28 · 188 阅读 · 0 评论 -
GYM 101806 T 总结
GYM 101806 T 总结 这是一个经典的问题。 首先我们发现要满足∑j=1i−1dpj≤lpi\sum _{j=1}^{i-1} d_{p_j}\leq l_{p_i}∑j=1i−1dpj≤lpi,也就是说要使得∑j=1idpj≤lpi+dpi\sum _{j=1}^i d_{p_j}\leq l_{p_i}+d_{p_i}∑j=1idpj≤lpi+dpi。 设si=li+dis_i=l_i+d_isi=li+di。 显而易见,我们应该按照sis_isi升序放气球。 这原创 2020-11-10 18:11:26 · 117 阅读 · 0 评论 -
CF338D GCD Table题解(解同余方程组详解)
阅读此篇文章,你要了解"拓展欧几里得,EXGCD" 题面传送门 首先可以发现lcm(a1,a2...ak)∣ilcm(a_1,a_2...a_k)|ilcm(a1,a2...ak)∣i,所以对于如果i=lcm(a1,a2...ak)i=lcm(a_1,a_2...a_k)i=lcm(a1,a2...ak)满足条件,则其他情况的i一定满足条件。可以这样理解: 当i=lcm(a1,a2...ak)i=lcm(a_1,a_2...a_k)i=lcm(a1,a2...ak)时,i%ai=0(1≤i原创 2020-08-18 23:46:05 · 252 阅读 · 1 评论 -
斜率优化dp讲解
对于: dpi=min(kj∗xi+bj) dp_i=min (k_j*x_i+b_j) dpi=min(kj∗xi+bj) 的dp方程可以优化成O(nlogn)O(nlog_n)O(nlogn)的。原创 2020-05-13 23:36:58 · 437 阅读 · 1 评论