各种算法介绍、数据结构及定理
常见数据结构介绍和各种信息学重点算法
DoBelieve
天空越暗的时候,你越能看到星辰。
展开
-
lct学习小记
前言lctlctlct是我一直以来都不想接触的数据结构,最近,我终于把这个大坑填上了。基本定义边分成两种,轻边和重边。重边构成的链为重链,重链可以只为一个点。 在lctlctlct中,用一棵splaysplaysplay维护一条重链上的点,对于每一条轻边,必定有一端是连向一条重链上深度最小的点的,我们将这条轻边的信息记录在该重链对应的splaysplaysplay的rootrootr...原创 2018-06-06 11:17:26 · 428 阅读 · 0 评论 -
Min_25筛学习小记
前言听说大家都会了Min_25Min_25Min\_25或州阁筛了,虚的一批的我马上学了一下。Min_25筛首先这种筛法可以用来筛某种积性函数的前缀和,当然也不一定要积性函数,某些特殊的函数也能筛,时间复杂度O(n34log(n√))O(n34log(n))O(\frac{n^{\frac{3}{4}}}{log(\sqrt n)}),当然我并不会证。筛质数的函数值现有一函...原创 2018-05-22 15:48:32 · 1829 阅读 · 4 评论 -
第二类斯特林数与自然数幂和
一般求法一般求自然数幂和都会用到拉格朗日插值法,但仅当存在逆元的时候能用,给出一种用第二类斯特林数求自然数幂和的方法,时间复杂度是O(k2)O(k2)O(k^2)而不是O(k log k)O(k log k)O(k\ log\ k)的。F(x)=∑i≥0xii!∑j=1F{Fj}ij–F(x)=∑i≥0xii!∑j=1F{Fj}ij_F(x)=\...原创 2018-05-21 12:34:35 · 1498 阅读 · 1 评论 -
多项式取模及其应用
前置知识多项式求逆。多项式取模问题描述求A(x)A(x) modmod B(x)B(x),其中degAdegA>=degBdegBSolution令A(x)=B(x)C(x)+D(x)A(x)=B(x)C(x)+D(x),其中degDdegDdegBdegB 设degAdegA=nn,degBdegB=mm,则degDdegD m m,degCdegCnn-m原创 2018-01-21 21:28:25 · 5190 阅读 · 0 评论 -
Dirichlet卷积 学习小记
定义定义数论函数fff和ggg的狄利克雷卷积为hhh,则h(n)=∑d|nf(d)∗g(nd)h(n)=∑d|nf(d)∗g(nd)h(n)=\sum_{d|n}f(d)*g({n\over d}),记作h=f∗gh=f∗gh=f*g。一些性质DirichletDirichletDirichlet卷积满足交换律,结合律,对加法满足分配律 两个积性函数的狄利克雷卷积依旧为积性函数。...原创 2018-01-20 22:08:33 · 2231 阅读 · 0 评论 -
多项式求逆 与 多项式开方
介绍与基本概念多项式求逆元是多项式除法、多项式开根和多项式取模的必要过程,用快速傅里叶变换及倍增算法可以做到用OO(nn loglog nn)的时间复杂度求出一个多项式的逆元。对于一个多项式 A(x)A{(x)},称其最高项的次数为这个多项式的度(degreedegree),记作 degAdeg_A 对于多项式 A(x)A{(x)},B(x)B{(x)},存在唯一的Q(x)Q{(x)},R(x)R原创 2017-12-09 22:15:02 · 1224 阅读 · 1 评论 -
约瑟夫环各种实现方法的总结
约瑟夫问题约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.)一般形式NN个人围成一圈,从第一个开始报数,第MM个将淘汰,退出圈外,重复上述过程nn-11次,最后剩下一个,最后留下来的人获胜。求出最后获胜者的编号。 例如NN=66,MM=44,被杀掉的顺序是:44,22,11,33,66,55 获胜者便是5原创 2017-10-25 16:34:37 · 3802 阅读 · 0 评论 -
平衡树之Treap—强大的数据结构
Treap介绍Treap,是平衡树的分支之一,故也支持旋转操作,在数据结构中也称树堆,之所以叫树堆,是因为Treap=Tree(树)+Heap(堆)。其基本操作的期望时间复杂度为O(log n)。相对于其他的平衡二叉搜索树,Treap的特点是实现简单,且能基本实现随机平衡的结构。正题Treap是一棵二叉排序树,它的左子树和右子树分别是一个Treap,和一般的二叉排序树不同的是,Trea原创 2017-08-21 12:07:30 · 1044 阅读 · 0 评论 -
分块算法讲解
分块先简单介绍一下分块算法。 分块算法是一种很常见的根号算法,一般它的时间复杂度会带根号。 分块和线段树的区别在于,分块算法可以维护一些线段树维护不了的东西,例如单调队列等,线段树能维护的东西必须能够进行信息合并,而分块则不需要。不过,它们也有共同点,分块和线段树一样,分块需要支持类似标记合并的东西。 简单来说,分块算法就是优化过后的暴力。现在讲一下这种算法的实现。 这种算法会将序列(序列原创 2016-08-13 21:17:38 · 12172 阅读 · 0 评论 -
线性筛法求素数
普通筛法先讲一下普通的筛法。筛法,顾名思义,就是筛掉合数,剩下的就是素数了。 我们知道,合数一定可以分解为两个或以上的素数,所以我们只需要对于每一个素数ii,枚举一个大于22的数jj,将i∗ji*j(此为某个合数)筛掉。如果ii是合数,那一定会被它的一个质因数乘上某个数而被筛掉,反之,它将不会被筛掉。Code 1.0 for i:=2 to n do if原创 2016-03-22 12:35:27 · 4131 阅读 · 0 评论 -
差分约束系统
差分约束系统一开始并不知道差分约束是什么东东,直到最近做到了一道题,才知道这是什么。 差分约束可以说是有nn个形如xix_i-xjx_j<bb的条件的约束,问关于xx这个方程组的可行解。我们把每一个形如xix_i-xjx_j<bb的条件变成xix_i+(-bb)<xjx_j,有没有发现这不等式很熟悉,这不就是跑最短路时的最小值的更新条件吗?把所有的xix_i向xjx_j连一条权值为(-bb)的边,原创 2016-06-15 19:44:52 · 3163 阅读 · 1 评论 -
莫比乌斯反演—详解
介绍1、莫比乌斯反演是组合数学中很重要的内容,可以用于解决很多组合数学的问题。 2、莫比乌斯反演是数论中的重要内容,在许多情况下能够简化运算。 3、是个个很神奇的东西。引入考虑以下求和函数fn=∑d|ngdf_n=\sum_{d|n}g_d那么根据定义我们可以知道f1f_1=g1g_1f2f_2=g1g_1+g2g_2f3f_3=g1g_1+g3g_3原创 2016-05-27 19:11:51 · 8255 阅读 · 1 评论 -
莫队算法讲解(含树上莫队)
莫队算法莫队算法是一种离线算法,通常不能有修改 操作。 其通过对询问操作的执行顺序进行更改,然后使用最暴力的方法,可以达到很好的复杂度。首先,如果要用莫队算法,则必须满足已知ans[ll,rr]可以得到ans[ll+1,rr],ans[ll-1,rr],ans[ll,rr+1],ans[ll,rr-1]。莫队算法的实现步骤为: 1、先对原序列进行分块。 2、离线操作,对询问进行排序,以左端点所原创 2016-08-14 21:21:53 · 9922 阅读 · 1 评论