01 2020 档案

摘要:给定两个字符串AB,我们需要找出一个串,其在A中出现且不在B中出现,这个串为子串或者子序列,求在每种情况下,该串的最短长度。 考虑到后缀自动机可以识别一个字符串的所有子串,序列自动机可以识别一个字符串的所有子序列。 那么我们直接对AB两个字符串建出相应的自动机,在两个自动 阅读全文 »
posted @ 2020-01-31 20:30 lhm_liu 阅读(140) 评论(0) 推荐(0) 编辑
摘要:题目让我们维护一个连通无向图,边有边权,支持加边删边和询问从xy的异或最短路。 考虑到有删边这样的撤销操作,那么用线段树分治来实现,用线段树来维护询问的时间轴。 将每一条边的出现时间段标记到线段树上,表示在这一段询问中这条边存在。 异或最短路的处理方法与 "最大XOR和路径" 类似,给线段 阅读全文 »
posted @ 2020-01-27 12:39 lhm_liu 阅读(459) 评论(0) 推荐(0) 编辑
摘要:首先发现有连边和删边的操作,所以我们肯定要用LCT来进行维护。 接下来考虑如何进行LCT上的信息合并。 f=1,则函数为f(x)=sin(ax+b) f=2,则函数为f(x)=eax+b f=3,则函数为f(x)=ax+b 这道题中的信息为这三个函数 阅读全文 »
posted @ 2020-01-24 15:26 lhm_liu 阅读(304) 评论(0) 推荐(0) 编辑
摘要:学习计划 DP 插头DP 数据结构 后缀平衡树 树分块 块状链表 边分治 图论 哈密顿图 平面图 对偶图 弦图 线图 区间图 数学 贝尔数 拉格朗日四平方和定理 字符串 runs 计算几何 三角剖分 平面最近点对 随机增量法 杂项 舞蹈链 回滚莫队 悬线法 在咕的博客 支配树 最小树形图 圆方树 P 阅读全文 »
posted @ 2020-01-22 22:45 lhm_liu 阅读(367) 评论(1) 推荐(0) 编辑
摘要:Day 0 上午鸽了,没有去学校,怕不是要被班主任暴捶 下午坐高铁,通过换座和yxt坐了一路 北京地铁好挤,风很大,ddy没有挤上来,好惨 wd老师让我们吃便饭,去吃了麦当劳 宿舍虽然是六人间,但环境很好,以及我们五个人分在了一个地方,和天津老哥分到了一个宿舍 机房很棒,北京真好, 阅读全文 »
posted @ 2020-01-22 22:44 lhm_liu 阅读(309) 评论(0) 推荐(1) 编辑
摘要:Day 1 上午模拟赛三个题,那无敌的zzz也挂了 但jzp依旧很稳,太强了,感觉他稳了 我有点小慌,感觉自己好菜,昨天的简单题也没有看出来 教练来说今天的题是针对四百分以上选手,感觉好多了(没那么自闭了) 得知明天在火车上还要考模拟赛,惊了 下午和晚上继续敲模板,树剖十五分钟一 阅读全文 »
posted @ 2020-01-22 22:41 lhm_liu 阅读(322) 评论(0) 推荐(0) 编辑
摘要:住四人间,我爽了 宿舍开灯有莫名的延迟??? 上床的梯子横杆很细,巨痛!!!SP FA 大家在宿舍里不断发~财~(fafafa) 饭菜很便宜,早饭六元,午饭晚饭八元(因为我们被归为了国庆留校生) 山大附中和石门也来听,还有润德的一个小伙子,总共 阅读全文 »
posted @ 2020-01-22 22:40 lhm_liu 阅读(172) 评论(0) 推荐(0) 编辑
摘要:Day 0(下午入住) 五点到达,发现不是预想的四人间,而是八人间~~集中营~~(但还好只有六位入住)匆匆地安置住宿后,便去录播教室自习刷题了。 晚饭去办饭卡时,卡居然没了???只能明天中午再办。 一晚上只搞出了一个题,感觉自己太弱了,但是发现lyj在和女朋友聊骚,感觉自己还行,挺努力。 晚 阅读全文 »
posted @ 2020-01-22 22:38 lhm_liu 阅读(239) 评论(0) 推荐(0) 编辑
摘要:题意为在满足i=1nki(vivi)2siEU的条件下最小化i=1nsivi 先考虑贪心,因为最小化$\sum\limits_{i=1}^n\frac{s_i}{ 阅读全文 »
posted @ 2020-01-22 22:37 lhm_liu 阅读(304) 评论(0) 推荐(0) 编辑
摘要:考虑用DP和组合数学来解决。 因为原图像不规则的形状不好处理,所以先用笛卡尔树(性质为小根堆)将其划分成一个一个的矩形。 发现在笛卡尔树上的每个节点都对应一个矩形,矩形高为hxhfax,宽为sizex。 结合笛卡尔树的性质,不难得到,红色矩形所对应的节点的两个儿子为绿色矩形 阅读全文 »
posted @ 2020-01-22 22:36 lhm_liu 阅读(390) 评论(0) 推荐(0) 编辑
摘要:进行分析后,发现最大收益可以转化为最小代价,那么我们就可以考虑用最小割来解决这道题。 先算出总收益sum,总收益减去最小代价即为答案。 然后考虑如何建图,如何建立最小割的模型。 发现一个任务最终的处理只有两种情况: ① 不完成这个任务,那么我们需要支付val的代价。 ② 完成这个任务,若任务 阅读全文 »
posted @ 2020-01-22 22:35 lhm_liu 阅读(284) 评论(0) 推荐(0) 编辑
摘要:考虑树形DP,设numx记录的为当1为根时,以x为子树中重要城市的个数。 那么进行分类讨论: ① 当numx0时,则需将其所有满足numy0的儿子y删去。 ② 当numx=0时,若满足numy0的儿子y个数cnt=1,则直接让num进行 阅读全文 »
posted @ 2020-01-22 22:31 lhm_liu 阅读(237) 评论(0) 推荐(0) 编辑
摘要:最小树形图(朱刘算法)+ 二分答案。 由题意得,我们要在一些有向边中选出一些边,使0号节点能够到达其他节点,使距离之和cost,并且使每条边中的带宽的最小值最大。 为方便起见,我将0n1号节点都++,转为1n号节点。 第一个要求用 阅读全文 »
posted @ 2020-01-22 22:30 lhm_liu 阅读(188) 评论(0) 推荐(0) 编辑
摘要:首先进行贪心,发现海拔有梯度时一定是不优的,最优的情况是海拔像断崖一样上升,也就是左上角有一片海拔高度为0,右下角有一片海拔高度为1。 发现这样的性质后,不难想到用最小割来解决问题,但数据规模过大,需要进行优化。 考虑到网格图是特殊的平面图,那么我们就将平面图转化为对偶图,通过对偶图求最短路 阅读全文 »
posted @ 2020-01-22 22:27 lhm_liu 阅读(210) 评论(0) 推荐(0) 编辑
摘要:由数据范围可得出,不可能一次一次去进行回答询问,只能离线处理,然后O(1)解决。 考虑DP解决,先给出DP方程: fi=max(j+sj+1i) (fi表示为当前一次操作最多访问i个未访问的点的最小操作次数,si 阅读全文 »
posted @ 2020-01-22 22:26 lhm_liu 阅读(275) 评论(0) 推荐(0) 编辑
摘要:发现在同一时间段中,滑动的方向具有唯一性,所以不难得出DP方程。 fi,j=max(fi,j,fidx,jdy+disi,j,idx,jdy) (i,j)为坐标,(idx,jdy)为可以转移到(i,j)的合法坐标,dis为计算两个坐标 阅读全文 »
posted @ 2020-01-22 22:25 lhm_liu 阅读(138) 评论(0) 推荐(0) 编辑
摘要:从题面中四元组(i,hi,j,hj)限制选择车子型号,不难想到这题要用2SAT解决。 考虑转化为2SAT模型,发现除地图x外,其他地图都只有两种车子型号可以参加,那么就把这两种型号转化为两种状态。 若Si=a,则状态为BC。 若Si=b,则状态为A阅读全文 »
posted @ 2020-01-22 22:22 lhm_liu 阅读(247) 评论(0) 推荐(0) 编辑
摘要:考虑2SAT。 将汉式看作0状态,满式看做1状态,将每个材料拆成01两个状态。 从ab连有向边表示的意义为选了a后必须选b。 那么每次连边的方式如下: add(xa1,yb),add(yb1,xa)xa阅读全文 »
posted @ 2020-01-22 22:20 lhm_liu 阅读(209) 评论(0) 推荐(0) 编辑
摘要:本题要求我们支持三种操作: ① 点向点连边。 ② 点向区间连边。 ③ 区间向点连边。 然后跑最短路得出答案。 考虑使用线段树优化建图。 建两颗线段树,入树和出树,每个节点为一段区间的原节点集合。入树内部为儿子向父亲连有向边,出树内部为父亲连有向边,因为入树和出树的叶子节点都为原图中的点,所以两棵树的 阅读全文 »
posted @ 2020-01-22 22:19 lhm_liu 阅读(213) 评论(0) 推荐(0) 编辑
摘要:给定一棵二叉树,叶子节点有权值,可以进行若干次交换一个节点的左右儿子的操作,使前序遍历叶子的逆序对最少。 考虑一个节点下子树逆序对的产生: ① 只在左子树中产生。 ② 只在右子树中产生。 ③ 在左子树和右子树中交叉产生。 因为二叉树的性质,所以 ① ② 两种情况只需递归下去求解,只需考虑情况 ③ 。 阅读全文 »
posted @ 2020-01-22 22:17 lhm_liu 阅读(132) 评论(0) 推荐(0) 编辑
摘要:根据题意,我们不难发现忍者之间的关系是树形结构。 发现答案的统计只是在该节点的子树中,因此我们考虑通过树形DP来解决问题。 从叶子节点开始,从下往上考虑,因为一个节点的最优答案只与他的领导力和在子树中选了几个点有关,与选哪些点无关,所以我们要最大化选点的个数。 贪心策略即为尽可能的多选点,当选出 阅读全文 »
posted @ 2020-01-22 22:16 lhm_liu 阅读(164) 评论(0) 推荐(0) 编辑
摘要:树上数颜色,因为是查询子树,所以用 dfn 序将树上问题转化为序列问题,然后就是裸的莫队数颜色了。 统计答案时还需注意一些细节问题,实现就看代码。 时间复杂度为 O(nn)code: 阅读全文 »
posted @ 2020-01-22 22:15 lhm_liu 阅读(211) 评论(0) 推荐(0) 编辑
摘要:根据毛毛虫的定义,我们不难发现在双连通分量中的点我们都需要进行合并操作,所以我们先进行tarjan缩边双连通分量,使原图变成一棵树,缩点对答案产生的贡献为每个双连通分量的size1 然后我们继续考虑树的情况,发现,若要将树变成毛毛虫,最优的操作是保留叶子节点和除去叶子后的直径,于是我们记录 阅读全文 »
posted @ 2020-01-22 22:14 lhm_liu 阅读(311) 评论(0) 推荐(0) 编辑
摘要:这个题和P3203 弹飞绵羊基本上完全一致 我的做法是用LCT维护信息,开一个节点fly,表示到此节点时,小球会弹飞,那么查询弹多少次即为siz[fly]1 最后一次落在哪个洞可以用维护链上最大值来解决 一些小细节看代码就行了 code: 阅读全文 »
posted @ 2020-01-22 22:13 lhm_liu 阅读(225) 评论(0) 推荐(0) 编辑
摘要:模拟赛考到了这个题,但我傻傻的用了DFS,于是爆了零 后来才想明白,因为搜索树的分支很多,但答案的深度却又没有那么深,所以在这里BFS,而DFS一路搜到底的做法则会稳稳地T飞掉 其他细节请看代码注释 code: #include<bits/stdc++.h> #define 阅读全文 »
posted @ 2020-01-22 22:12 lhm_liu 阅读(309) 评论(0) 推荐(0) 编辑
摘要:用计算器算一算,就可以发现1018的数,被开方6次后就变为了1。 所以我们可以直接暴力的进行区间修改,若这个数已经到达1,则以后就不再修改(因为1开方后还是1),用并查集和树状数组进行维护。 这个方法用了 "P2391 白雪皑皑" 的思想处理,用并查集标记该点已经不再用 阅读全文 »
posted @ 2020-01-22 22:11 lhm_liu 阅读(270) 评论(0) 推荐(0) 编辑
摘要:思路与 "中位数" 一题,解决方案比较像,使用对顶堆来解决。 具体实现为,使用两个堆,大根堆维护较小的值,小根堆维护较大的值,即小根堆的堆顶是较大的数中最小的,大根堆的堆顶是较小的数中最大的。 将大于大根堆堆顶的数(比所有大根堆中的元素都大)的数放入小根堆,小于等于大根堆堆顶的数(比所有小根堆中的元 阅读全文 »
posted @ 2020-01-22 22:10 lhm_liu 阅读(172) 评论(0) 推荐(0) 编辑
摘要:可以事先打表观察每个数的约数个数,观察到如果进行替换,若干次后这个数便会被替换成1。 所以我们可以直接暴力的进行区间修改,若这个数已经到达1或2,则以后就不再修改,用并查集和树状数组进行维护。 这个方法用了P2391 白雪皑皑的思想处理,用并查集标记该点已经不再用替换。 code: #include 阅读全文 »
posted @ 2020-01-22 22:09 lhm_liu 阅读(163) 评论(0) 推荐(0) 编辑
摘要:这道题因为要求价值最大值,所以正方形应尽可能多覆盖目标,因此所得的正方形四个顶点一定在格点上。 经过分析后,我们就可以知道,该题做法就是用二维前缀和进行事前预处理,然后一个一个枚举每个点覆盖到的总价值。 注意点: 1.为了防止被xi=0和yi=0的情况坑和方便进行前缀和优化处理,我们可以将每个点的坐 阅读全文 »
posted @ 2020-01-22 22:08 lhm_liu 阅读(164) 评论(0) 推荐(0) 编辑
摘要:四边形不等式 二维 优化形如 fl,r=mink=lr1{fl,k+fk+1,r+wl,r}DP 方程,如石子合并问题。其直接做复杂度是 O(n3) 的。 若 w 满足: 四边形不等式(交叉小于包含) 阅读全文 »
posted @ 2020-01-22 22:06 lhm_liu 阅读(727) 评论(0) 推荐(0) 编辑
摘要:自适应辛普森法通过Simpson公式,用二次函数来拟合,实现时用二分递归来自动控制区间分割的大小,既保证精度,又保证速度 Simpson公式推导 abf(x)dx abAx2+Bx+C \(=\frac{A}{3}(b^3-a^3)+\ 阅读全文 »
posted @ 2020-01-22 22:04 lhm_liu 阅读(674) 评论(0) 推荐(0) 编辑
摘要:KD Tree是一种可以高效处理k维空间信息的数据结构 KD Tree具有二叉搜索树的形态,二叉搜索树上的每个结点都对应k维空间内的一个点。其每个子树中的点都在一个k维的超长方体内,这个超长方体内的所有点也都在这个子树中 同时用mami来记录划分出的子空间的边界 阅读全文 »
posted @ 2020-01-22 22:03 lhm_liu 阅读(425) 评论(0) 推荐(1) 编辑
摘要:笛卡尔树是一棵二叉树,每个节点的编号满足二叉搜索树的性质,即二叉树的中序遍历是原数列,每个节点的权值满足堆的性质,也就是说,Treap就是笛卡尔树 在笛卡尔树上两个点的LCA就是这一区间的最值 用增量法来建树,维护一个单调栈,栈内元素为右子树链 因为每个节点最多进栈出栈一次,所以时间复杂度是 阅读全文 »
posted @ 2020-01-22 22:02 lhm_liu 阅读(159) 评论(0) 推荐(0) 编辑
摘要:code: 阅读全文 »
posted @ 2020-01-22 22:00 lhm_liu 阅读(124) 评论(0) 推荐(0) 编辑
摘要:BSGS 求解 axb(modp),ap。 由欧拉定理 aφ(m)1(modm),am 得方程的解取值范围为 [1,φ(m)]。 设 \(x=A \sqrt p - B,0 \ 阅读全文 »
posted @ 2020-01-22 21:59 lhm_liu 阅读(211) 评论(1) 推荐(0) 编辑
摘要:code: 阅读全文 »
posted @ 2020-01-22 21:58 lhm_liu 阅读(141) 评论(0) 推荐(0) 编辑
摘要:code: 阅读全文 »
posted @ 2020-01-22 21:08 lhm_liu 阅读(218) 评论(0) 推荐(0) 编辑
摘要:中国剩余定理 概念 求解关于 x 的一元线性同余方程组: {xa1(modm1)xa2(modm2)xan(modmn) 阅读全文 »
posted @ 2020-01-22 21:07 lhm_liu 阅读(248) 评论(0) 推荐(0) 编辑
摘要:高斯消元用来求解线性方程组 构造增广矩阵,然后对增广矩阵消元 每次选取这一列绝对值最大的值作为主元,可以避免精度误差,如果发现这一列都为0,则方程无解 然后将主元系数化为1,矩阵化为上三角矩阵后,便可以回代求解 支持判是否多解 code: 高斯消元还可以用来求逆矩阵 一个矩阵A若可以 阅读全文 »
posted @ 2020-01-22 21:05 lhm_liu 阅读(240) 评论(0) 推荐(0) 编辑
摘要:费马小定理 定理 若 p 为素数,得: ap11(modp),ap 证明 考虑对于 p1 个数 amodp,2amodp,,(p1)amodp,其中 \(a \bot p 阅读全文 »
posted @ 2020-01-22 21:04 lhm_liu 阅读(518) 评论(0) 推荐(0) 编辑
摘要:对于一个数论函数f,当gcd(a,b)=1时,f(ab)=f(a)f(b),则称其为积性函数 对于一个数论函数f,若 f(ab)=f(a)f(b),则称其为完全积性函数 线性筛流程: ① 处理素数p ② 处理i×p ,其中i是任意正整数,$p \nmid 阅读全文 »
posted @ 2020-01-22 21:03 lhm_liu 阅读(131) 评论(0) 推荐(0) 编辑
摘要:普通求逆元 ax1 (mod p) 其中x就是a在模p意义下的乘法逆元(inv) gcd(a,p)=1时存在,即a在模p意义下有逆元的充要条件是a, p互质 计算等价于解方程ax+bp=1 定义了剩余系中的除法$\frac{a}{b}≡a × in 阅读全文 »
posted @ 2020-01-22 21:02 lhm_liu 阅读(172) 评论(0) 推荐(0) 编辑
摘要:求x=0n1ax+bcf(a,b,c,n)=x=0n1ax+bc 进行化简,得 $$ \begin{aligned} &f(a,b 阅读全文 »
posted @ 2020-01-22 21:01 lhm_liu 阅读(207) 评论(0) 推荐(0) 编辑
摘要:给定树上一些点集,处理和该点集有关的询问,通常这些询问需要用树形DP解决 若发现所有询问的点集总大小k105,那么就可以考虑用虚树来解决 若原树为 若询问点为1 2 3,则虚树为 若询问点为1 3 7 8,则虚树为 构造出的虚树为询问点和询问 阅读全文 »
posted @ 2020-01-22 20:58 lhm_liu 阅读(175) 评论(0) 推荐(0) 编辑
摘要:用朱刘算法来实现 code: 阅读全文 »
posted @ 2020-01-22 20:57 lhm_liu 阅读(119) 评论(0) 推荐(0) 编辑
摘要:code: 阅读全文 »
posted @ 2020-01-22 20:56 lhm_liu 阅读(123) 评论(0) 推荐(0) 编辑
摘要:概念 优化形如 fi=min/max{fj+ai×bj+ci+dj}DP 方程,方程存在 ij 相乘的项。 设存在两个决策点 j,k,且决策点 j 比决策点 k 更优,例如为取最小值时,得: \[ \large\ 阅读全文 »
posted @ 2020-01-22 20:55 lhm_liu 阅读(230) 评论(0) 推荐(0) 编辑
摘要:优化形如fi=min/max(fi,fj+vali)(lijri)DP方程 如 "瑰丽华尔兹" 中DP方程为fi,j=max(fi,j,fidx,jdy+disi,j,idx,jdy) $co 阅读全文 »
posted @ 2020-01-22 20:54 lhm_liu 阅读(105) 评论(0) 推荐(0) 编辑
摘要:在一个树形数据结构上的每个节点都是一个树形数据结构 支持操作 ① 查询k在区间内的排名(通过线段树来合并区间来统计答案) ② 查询区间内排名为k的值(通过二分实现,用查询排名来check) ③ 修改某一位值上的数值(线段树单点修改,同时更新平衡树) ④ 查询k在区间内的前驱(通过线段 阅读全文 »
posted @ 2020-01-22 20:53 lhm_liu 阅读(201) 评论(0) 推荐(0) 编辑
摘要:2SAT是一种特殊的逻辑判定问题 其为一串布尔变量,每个变量只能为真或假。要求对这些变量进行赋值,满足布尔方程 对每个变量,规定x为其0状态,x+n为其1状态 从xy连一条有向边表示选了x后必须选y 缩点后,若存在xx在同一个强连通分量 阅读全文 »
posted @ 2020-01-22 20:51 lhm_liu 阅读(165) 评论(0) 推荐(0) 编辑
摘要:普通莫队 块大小取为n 询问排序时可选择按奇偶性排序 code: 阅读全文 »
posted @ 2020-01-22 20:50 lhm_liu 阅读(269) 评论(0) 推荐(0) 编辑
摘要:单调递增:队内元素为递增 单调递减:队内元素为递减 队内可存储下标,也可存储元素 code: 阅读全文 »
posted @ 2020-01-22 20:49 lhm_liu 阅读(175) 评论(0) 推荐(0) 编辑
摘要:单调递增栈:栈顶到栈底为递增,数据出栈的序列为单调递增序列 单调递减栈:栈顶到栈底为递减,数据出栈的序列为单调递减序列 栈内可存储下标,也可存储元素 code: 阅读全文 »
posted @ 2020-01-22 20:47 lhm_liu 阅读(128) 评论(0) 推荐(0) 编辑
摘要:通过分治来用一个子问题来计算对另一个子问题的贡献,先考虑前半部分,再考虑后半部分,再考虑前半部分对后半部分的影响 处理修改独立,询问可离线的一类问题,对时间分治,用左边的修改处理右边的询问 可以用来解决三维偏序问题 "陌上花开" code: cpp void cdq(int l,int r) 阅读全文 »
posted @ 2020-01-22 20:46 lhm_liu 阅读(113) 评论(0) 推荐(0) 编辑
摘要:左偏树可以用来维护可并堆(并查集加堆) 可以用并查集一样的路径压缩来优化复杂度 路径压缩后fa记录的就不为其原树中的父亲,而是用来表示堆与堆之间的关系 dis:表示该节点到它子树内最近的叶子节点的距离 节点的左儿子的距离不小于右儿子的距离,每次合并时,将一棵树合并到另一棵树的右子树,来保证复 阅读全文 »
posted @ 2020-01-22 20:45 lhm_liu 阅读(104) 评论(0) 推荐(0) 编辑
摘要:将矩形分成上边和下边,用四元组(l,r,h,k)来表示一条边,其中k=1时,其为下边,k=1时,其为下边, 扫描线从下往上扫,每次遇到一条上边或下边时,就停下来 用线段树维护,线段树的每个区间即为x轴上的区间,因数据过大,所以将x轴上的点离散化处理,那么就可以通过线段树的区间合 阅读全文 »
posted @ 2020-01-22 20:44 lhm_liu 阅读(210) 评论(0) 推荐(0) 编辑
摘要:Graham算法 先找出以y值为第一关键字和以x值为第二关键字最小的点,以其作为基准点 然后对剩下的点进行极角序排序 向栈中加点,并维护凸性,最终栈中的点即为凸包上的点 复杂度即为排序的复杂度O(n log n) code: 阅读全文 »
posted @ 2020-01-22 20:41 lhm_liu 阅读(161) 评论(0) 推荐(0) 编辑
摘要:概要 后缀自动机可以理解为是将字符串所有后缀所建出的 Trie 进行压缩后得出的 DAG。 对于一个子串 s,它结束位置的集合称为 endpos(s),如 aaabbaab,\(\text{endpos}(ab)=\{4,8\},\text{en 阅读全文 »
posted @ 2020-01-22 20:40 lhm_liu 阅读(480) 评论(0) 推荐(1) 编辑
摘要:将字符串每个后缀按照字典序排序 sa:表示排名为i的后缀的起始位置 rk:表示起始位置为i的后缀的排名 sa[rk[i]]=i, rk[sa[i]]=i 通过倍增和基数排序来实现O(n log n)的排序 基数排序时先排第一关键字,再在第一关键字相同下排第二关键字 阅读全文 »
posted @ 2020-01-22 20:39 lhm_liu 阅读(140) 评论(0) 推荐(0) 编辑
摘要:code: 阅读全文 »
posted @ 2020-01-22 20:37 lhm_liu 阅读(295) 评论(0) 推荐(0) 编辑
摘要:因为Treap只认儿子不认爸爸,所以方便复制,直接可持久化就行了 code: 阅读全文 »
posted @ 2020-01-22 20:35 lhm_liu 阅读(315) 评论(0) 推荐(0) 编辑
摘要:split:将一棵Treap按照某种划分标准分成ab两棵Treap xy分别表示ab的根 划分后,a中所有元素都kb中所有元素都k 权值分裂 code: 排名分裂 code: merge:合并xy 阅读全文 »
posted @ 2020-01-22 20:34 lhm_liu 阅读(194) 评论(0) 推荐(0) 编辑
摘要:code: 阅读全文 »
posted @ 2020-01-22 20:33 lhm_liu 阅读(221) 评论(0) 推荐(0) 编辑
摘要:形如 f(x)=a0x0+a1x1+a2x2++an1xn1。 点值表示法:通过代入 n 个不同的值 x0,x1xn1f(x) 中,得到 y0,y1...yn1,用 \((x 阅读全文 »
posted @ 2020-01-22 20:32 lhm_liu 阅读(584) 评论(0) 推荐(0) 编辑
摘要:排列数 Anm=n(n1)(n2)  (nm+1)=n!(nm)! 组合数 Cnm=Cn1m+Cn1m1 Cnm=Cnnm $C^m_n=\frac{n}{m}×C^{m 阅读全文 »
posted @ 2020-01-22 20:31 lhm_liu 阅读(225) 评论(0) 推荐(0) 编辑
摘要:Link Cut Tree(动态树)用实链剖分来实现,维护的对象为一个森林,将原树剖分为若干个辅助树,辅助树用Splay来维护 辅助树内部用实边连接,辅助树之间用虚边连接,虚边总是由一棵Splay指向另一棵Splay的根,即为其中序遍历的第一个点 因为虚边是Splay之间 阅读全文 »
posted @ 2020-01-22 20:30 lhm_liu 阅读(222) 评论(0) 推荐(0) 编辑
摘要:点分治用来处理树上路径问题,每一次将树分治为几棵子树,然后继续递归,得到答案 每次分治时,子树的根选取为其的重心,递归的子树大小不会超过原树大小的一半,保证了时间复杂度为O(n log n) 利用容斥原理统计答案 树上有多少对点,满足两点间的距离小于等于k code: void 阅读全文 »
posted @ 2020-01-22 20:29 lhm_liu 阅读(229) 评论(0) 推荐(0) 编辑
摘要:主席树节点中维护的值,是[x,y]之间这个区间内数字出现了的次数 利用可持久化线段树的性质来进行查询,如查询区间[2,5],即将版本五和版本一对应节点相减,即为[2,5]内某个范围内的数字的个数 对于一个区间[l,r],每次算出在[l,mid]范围内的数字个数,如果数量$ 阅读全文 »
posted @ 2020-01-22 20:25 lhm_liu 阅读(188) 评论(0) 推荐(0) 编辑
摘要:合并不采用路径压缩,保证每次合并只修改一个节点的父亲,使当前版本与上一版本共用的节点尽可能的多 为防止并查集退化成链,采取按秩合并 code阅读全文 »
posted @ 2020-01-22 20:24 lhm_liu 阅读(188) 评论(0) 推荐(0) 编辑
摘要:每次进行单点修改后,会新增log n个新节点,即每次更改的结点数为树的高度 增加的非叶子结点一个儿子是其他版本的节点,另一个儿子是连向新节点 空间复杂度为O(n+m log n) code: 标记永久化实现区间加区间查询 code: 阅读全文 »
posted @ 2020-01-22 20:23 lhm_liu 阅读(176) 评论(0) 推荐(0) 编辑
摘要:一个网络 G=(V,E) 是一张有向图,图中每条有向边 (x,y)E 都有一个给定的权值 c(x,y),称为边的容量。特别地,若 (x,y)E,则 c(x,y)=0。图中还有两个指定的特殊节点 \(S,T \in V(S \neq T) 阅读全文 »
posted @ 2020-01-22 20:22 lhm_liu 阅读(403) 评论(0) 推荐(1) 编辑
摘要:构建字典图实现自动跳转,构建失配指针实现多模式匹配 fail 指针表示文本串在当前节点失配后,我们应该到哪个节点去继续匹配,ufail 指针指向 v 表示从根到 v 的字符串为从根到u的字符串的最长后缀,用 bfs 来构建 阅读全文 »
posted @ 2020-01-22 20:21 lhm_liu 阅读(124) 评论(0) 推荐(0) 编辑
摘要:void insert(ll x) { for(int i=50;i>=0;--i) { if(x&((ll)1<<i)) { if(!a[i]) { a[i]=x; break; } else x^=a[i]; } } } ll query_max() { ll ans=0; for(int i= 阅读全文 »
posted @ 2020-01-22 20:20 lhm_liu 阅读(180) 评论(0) 推荐(0) 编辑
摘要:普通快速幂 code: 有时配合龟速乘使用 code: O(1)快速乘 code: 矩阵快速幂 code: 通常用来矩阵加速,已知递推式,求数列第n项 如f[i]=f[i3]+f[i1] (i3) 先构造目标矩阵$\begin{bmatr 阅读全文 »
posted @ 2020-01-22 20:19 lhm_liu 阅读(120) 评论(0) 推荐(0) 编辑
摘要:欧拉筛 求小于n的所有正整数中的素数集合 code: 每个数只会被最小的素因子筛一次 阅读全文 »
posted @ 2020-01-22 20:18 lhm_liu 阅读(140) 评论(0) 推荐(0) 编辑
摘要:裴蜀定理 对任何整数 ab 关于未知数 xy 的线性不定方程(称为裴蜀等式):ax+by=c 方程有整数解(当且仅当 cgcd(a,b) 的倍数),裴蜀等式有解时必然有无穷多个解 即 ax+by=c 有解的充要条件为 gcd(a,b)|c 原方程的解 阅读全文 »
posted @ 2020-01-22 20:17 lhm_liu 阅读(186) 评论(0) 推荐(0) 编辑
摘要:code: 借助s数组来离散化a数组 阅读全文 »
posted @ 2020-01-22 20:16 lhm_liu 阅读(119) 评论(0) 推荐(0) 编辑
摘要:code: code: 随机数生成 阅读全文 »
posted @ 2020-01-22 20:14 lhm_liu 阅读(135) 评论(0) 推荐(0) 编辑
摘要:O(n log n)预处理,O(1)查询最值 f[i][j]表示,从i位置开始的2j个数中的最大值,例如f[i][0]表示的是i位置的值,f[i][1]表示的是i位置和i+1位置中两个数的最大值 code阅读全文 »
posted @ 2020-01-22 20:13 lhm_liu 阅读(155) 评论(0) 推荐(0) 编辑
摘要:二叉查找树,对于任意一个节点,该节点的关键码大于它的左子树中任意节点的关键码,该节点的关键码小于它的右子树中任意节点的关键码,且没有键值相等的点 二叉查找树的中序遍历是一个关键码单调递增的节点序列 数组及变量 fa[i]: 节点i的父节点 son[i][0]: 节点i的左儿子 $so 阅读全文 »
posted @ 2020-01-22 20:12 lhm_liu 阅读(269) 评论(0) 推荐(0) 编辑
摘要:概念: 重儿子:父亲结点的所有儿子中子树结点数目最多(size最大)的结点 轻儿子:父亲结点中除了重儿子以外的儿子 重边:父亲结点和重儿子连成的边 轻边:父亲结点和轻儿子连成的边 重链:由多条重边连接而成的路径 轻链:由多条轻边连接而成的路径 性质: 在轻边(u,v)中,\(size(u)/ 阅读全文 »
posted @ 2020-01-22 20:11 lhm_liu 阅读(238) 评论(0) 推荐(0) 编辑
摘要:判负环 跑SPFA时,设spcnt[x]表示从x入队次数,若更新时, sp_cnt[y]>n ,则说明图中有负环,算法正常结束,则图中无负环 bool spfa() { queue<int> q; dis[1]=0; vis[1]=true; q.push(1); wh 阅读全文 »
posted @ 2020-01-22 20:10 lhm_liu 阅读(241) 评论(0) 推荐(0) 编辑
摘要:可以通过两次dfsbfs求出树的直径,从任意结点出发,搜索得出直径的一个端点,然后从这个端点继续搜索,得出另一个端点,但无法处理负边权 code: 也可以用树形DP求直径,考虑每个结点x,求出经过结点x的最长链长度,则树的直径长度就是这些最长链长度的最大值,但无法求出直径的 阅读全文 »
posted @ 2020-01-22 20:09 lhm_liu 阅读(138) 评论(0) 推荐(0) 编辑
摘要:LCA,即最近公共祖先,是指在有根树中,找出某两个结点uv最近的公共祖先 倍增法求LCA,核心本质是让两个结点每次向上走2的幂次步 先处理出倍增数组fafa[i][j]为从结点i向上走2j步后能走到的结点 再将两个点移到同一深度 最后开始倍增来跳深度,应用了 阅读全文 »
posted @ 2020-01-22 20:08 lhm_liu 阅读(164) 评论(0) 推荐(0) 编辑
摘要:拓扑排序是选择入度为0的点来进行bfs的一个过程,求出拓扑序列 点之间的关系有并列关系和先后关系,因为并列关系的存在,所以拓扑序列不一定是唯一的 code: "车站分级" ,巧妙建图,然后用拓扑的性质得出答案 "菜肴制作" ,建反图跑拓扑 阅读全文 »
posted @ 2020-01-22 20:07 lhm_liu 阅读(130) 评论(0) 推荐(0) 编辑
摘要:必须考虑的状态: 决策了前i位(该填第p位) 已填位保证在区间范围内,比最大值小(bool变量) 由题意来判定填数的范围(如前一位前两位的数,前一位是否为某数) 阅读全文 »
posted @ 2020-01-22 20:06 lhm_liu 阅读(150) 评论(0) 推荐(0) 编辑
摘要:由数据范围得出状态,如 "乌龟棋" 和 "杨老师的照相排列" ,分别为用了某种牌几张和某排站了多少人,乌龟棋用牌的使用情况也反映了当前的位置,其实也是根据题意模拟。 根据题意,设置状态,使设置的状态能够覆盖到所有情况,并可以很好的进行转移,如 "移动服务" ,将员工的位置设为状态,并可以进一步优化, 阅读全文 »
posted @ 2020-01-22 20:05 lhm_liu 阅读(183) 评论(0) 推荐(0) 编辑
摘要:有向图 搜索树 对有向图进行 dfs 时,递归经过的有向边形成的树,被称为搜索树。 树边:边 (x,y) 在搜索树中。 前向边:搜索树中存在一条 xy 的路径。 后向边:搜索树中存在一条 yx 的路径。 横叉边:搜索树中不存在 x 阅读全文 »
posted @ 2020-01-22 20:04 lhm_liu 阅读(597) 评论(0) 推荐(2) 编辑
摘要:二分图匹配(匈牙利算法) 匈牙利算法就是用增广路求最大匹配问题 可以理解为是左部图被匹配 时间复杂度为O(nm),但事实上,对于绝大部分的二分图,匈牙利算法都跑不够上限 此时mtc[i]储存的为右部图i所对应左部图的匹配 code: bool dfs(int x) { for(i 阅读全文 »
posted @ 2020-01-22 20:03 lhm_liu 阅读(277) 评论(0) 推荐(0) 编辑
摘要:Kruskal 先把边按照权值进行排序,用贪心的思想优先选取权值较小的边,并依次连接,若出现环则跳过此边(用并查集来判断是否存在环)继续搜,直到已经使用的边的数量比总点数少一即可。 code: 其他 若原图不连通,即建出的是一个森林,要结合题意再进行处理,如 "货车运输" ,跑完最大生成树后 阅读全文 »
posted @ 2020-01-22 20:02 lhm_liu 阅读(140) 评论(0) 推荐(0) 编辑
摘要:Floyd 多源最短路算法,用邻接矩阵存储,可以处理负边权,不能处理负环,本质是个DP。 需要三层循环,时间复杂度为O(n3),在稠密图中有优势。 记得dis数组要初始化成正无穷(不相连的点之间),并且自己到自己的距离为0,即dis[i][i]=0。 \(code\ 阅读全文 »
posted @ 2020-01-22 20:01 lhm_liu 阅读(247) 评论(0) 推荐(0) 编辑
摘要:邻接矩阵适合稠密图,空间耗费为n2(n为点的个数)。 邻接表适合稀疏图,空间耗费为m(m为边的条数)。 通常来讲,在数据范围足够小时,采用邻接矩阵,而数据范围大时采用邻接表。 阅读全文 »
posted @ 2020-01-22 20:00 lhm_liu 阅读(124) 评论(0) 推荐(0) 编辑
摘要:给定一个字符串,求它的最长回文子串的长度。 这里要注意,回文串是要分奇回文串和偶回文串。为了避免讨论,我们在字符中间加入特殊字符。如abaabbc变为 a b a a b b c 。 时间复杂度为O(n)code阅读全文 »
posted @ 2020-01-22 19:58 lhm_liu 阅读(138) 评论(0) 推荐(0) 编辑
摘要:给定两个字符串s1s2,求s2s1中所有的出现位置。 KMP有递推的感觉。 在模式串str2中,对于每一位str2(i) ,它的kmp数组应当是记录一个位置j,ji,并且满足str2(i)=str2(j),并且在j!=1阅读全文 »
posted @ 2020-01-22 19:57 lhm_liu 阅读(144) 评论(0) 推荐(0) 编辑
摘要:字典树就是把所有单词插入一颗搜索树里。这样可以在线性时间内完成查找和维护信息。 应用有, "于是他错误的点名开始了" 和 "补退选" 。 code阅读全文 »
posted @ 2020-01-22 19:56 lhm_liu 阅读(305) 评论(0) 推荐(0) 编辑
摘要:一般的字符串哈希:我们设置一个进制x,把这个串s看做一个x进制数。 Num=s1x0+s2x1+s3x2+s4x3+ 然后对一个比较大的质数取模。 这种hash方法在随机情况下冲突的概率比较小,除非对着哈希构造方法卡。 模数一般选用一个较大的质数来减小冲突的概率 阅读全文 »
posted @ 2020-01-22 19:54 lhm_liu 阅读(145) 评论(0) 推荐(0) 编辑
摘要:NOIP阶段只要不涉及区间翻转、区间插入的序列问题都可以用线段树实现。 每一个节点维护一个区间的信息。 线段树有分治的感觉。 线段树可以处理很多符合结合律的操作。 时间复杂度,建树为O(n),区间查询和区间修改为O(log n)。 空间要开原序列长度的四倍。 查询的话就是序列分割,由于 阅读全文 »
posted @ 2020-01-22 19:53 lhm_liu 阅读(261) 评论(1) 推荐(0) 编辑
摘要:树状数组的本质是将前缀进行拆分维护,i号节点维护的是原序列上[ilowbit(i)+1,i]这段区间的信息。 lowbit(x)表示x这个数在2进制下从低到高第一个非零位在十进制下的,例如lowbit(7)=1,lowbit(8)=8。 根据计算机补码的性质可得$lowbit( 阅读全文 »
posted @ 2020-01-22 19:52 lhm_liu 阅读(125) 评论(0) 推荐(0) 编辑
摘要:并查集为森林的结构。有多棵多叉树,每个树的根结点定义为这棵树中元素的代表结点。 用于查询两个点是否在同一集合内,以及合并两个集合。 并查集妙用,如 "白雪皑皑" 和 "求和并替换" 。 带有偏移量的并查集,如 "银河英雄传说" 和 "食物链" 。 code阅读全文 »
posted @ 2020-01-22 19:50 lhm_liu 阅读(151) 评论(0) 推荐(0) 编辑
摘要:因为堆是一棵完全二叉树,所以对于一个节点数为n的堆,它的高度不会超过log n,所以对于插入,删除操作复杂度为O(log n),查询堆顶操作的复杂度为O(1)。 可以用来维护若干贪心题,如 "数据备份" (用堆来实现反悔), "超市" (也是一种反悔)。 用对顶堆(一个大根堆 阅读全文 »
posted @ 2020-01-22 19:49 lhm_liu 阅读(129) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示