摘要: 一、树链剖分的作用 通常是求树上u到v的路径节点之和 这个问题很容易可以想到设f[i]表示根节点到i节点的节点之和 t=lca(u,v),然后可以把u->v划分为u->t+t->v-t; 则有结论:u->v=f[u]+f[v]-2*f[t]+t,这样就可以求出来了 但是加上u到v的路径上的节点值的修 阅读全文
posted @ 2017-12-31 22:36 Accelerator-D-x 阅读(191) 评论(2) 推荐(0) 编辑
摘要: 一、LCA的定义: 在一棵树上,点u到点v之间的路径最短的那个节点就是lca(u,v) 二、倍增思想: 我们定义fa[i][j]表示节点i往上跳跃2^j次所到达的节点标号,则有结论: 1.因为2^(j-1)+2^(j-1)=2^j,所以fa[i][j]=fa[fa[i][j-1]][j-1]; 2. 阅读全文
posted @ 2017-12-31 22:12 Accelerator-D-x 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 一、动态开点线段树 为什么要搞这样的一个鬼畜线段树? 1.区间范围过大,但是只会用到一些特定的节点,暴力开会爆内存 2.要开多棵线段树,考虑会内存爆炸,也只建需要用的节点 这个线段树的唯一区别就是需要记录下左儿子和右儿子的编号 二、主席树(可持久化线段树) First: 主席树的来源: 一个名叫主席 阅读全文
posted @ 2017-12-31 21:59 Accelerator-D-x 阅读(158) 评论(3) 推荐(0) 编辑
摘要: 解法一: 首先想到通过位运算的性质来做这道题,将q[i]转为二进制来做。 可以分类讨论: 1.当q[i]的第j位为1时,就说明a[l[i]]~a[r[i]]的第j位上都是1 2.反过来,当q[i]的第j位上为0时,a[l[i]]~a[r[i]]的第j位上至少有一个0 所以,先将每一个1的条件满足,然 阅读全文
posted @ 2017-12-31 21:47 Accelerator-D-x 阅读(147) 评论(0) 推荐(0) 编辑
摘要: First: 调和级数是什么?用来干什么? 1.调和级数是一种结论,通过数学方法证明(自己百度。。太弱了不会) 2.调和级数目前可以用来做复杂度证明 Second: 1.调和级数公式: 这个公式可以用做复杂度证明 阅读全文
posted @ 2017-12-31 21:33 Accelerator-D-x 阅读(646) 评论(0) 推荐(0) 编辑