合集-学习笔记
摘要:矩阵乘法 对于线性简单的 dp 可以使用矩阵快速幂加速转移,可以从 \(O(n)\) 的时间复杂度降到 \(O(k^3\log n)\) ( \(k\) 为矩阵的大小,通常小于10) 先给出矩阵乘法的模板代码: struct MAT { int c[15][15],n,m; MAT() { mems
阅读全文
摘要:斜率优化dp 的小总结 首先下凸包/上凸包的求法可以使用单调队列/单调栈来实现。 #include <bits/stdc++.h> #define int long long using namespace std; const int N = 5E5 + 5; struct node { int
阅读全文
摘要:数位dp的标志: 要求统计满足一定条件的数的数量(即,最终目的为计数); 这些条件经过转化后可以使用「数位」的思想去理解和判断; 输入会提供一个数字区间(有时也只提供上界)来作为统计的限制; 上界很大(比如 \(10^{18}\)),暴力枚举验证会超时。 数位dp的模板题 A - 不要62 实现非常
阅读全文
摘要:同余最短路学习笔记 前言 因为没有做出来简单的同余最短路,遂来写一篇学习笔记涨涨记性。 正文 同与最短路,其实是一种类似完全背包的算法,求的东西都是一样的,但是同余最短路可以求的范围更广。 通常情况下表达式都是 $\sum_{i=1}^{n} a_ix_i =b $ 是否可行的情况。 这里的 \(a
阅读全文
摘要:分块学习笔记 分块是基于区间修改和查询的工具。 用一道题来引入: 给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值。 #6277. 数列分块入门 1 这道题如果用暴力来求解的话,需要 \(O(n^2)\) 的时间复杂度,这样我们是不满意的,那怎么办呢?我们想到,如果 \(l=1,r=n
阅读全文
摘要:非常综合的一道 dp 好题。 先对 \(x\) 排序。 首先可以想到这题的关键的是最大的 \(S\) ,其次是最小的面积。所以这个长度就是最长上升子序列的长度,所选的 \(S\) 也必须是一个 LIS ,像这样选一个 LIS 的题目可以对数据分层,\(f_i\) 是 \(i\) 为右端点的最长上升子
阅读全文
摘要:差分约束学习笔记 差分约束的题目通常是给你一些 \(x_i\) 和 \(x_j\) 的关系式,求是否有可行解等。 而这类题目的技巧也很简单,就是连边建图即可。 这里给出一些关系式的建图的方法 \[x_i \le x_j +c \Rightarrow j\xrightarrow{c} i\\ x_i
阅读全文
摘要:不带删的尺取。 这个技巧其实是一个运用双栈来模拟队列的一个应用,尺取可以理解为一个队列。 其实就是用一个栈来记队头,一个栈来记队尾,每个栈记对应的对应点记每个点的权值或下标,和它所对应栈的前缀。 每一次入栈时直接入栈(队头)更新前缀即可,而出栈时,若栈(队尾)已经空了,这时就应该把队头的栈直接倒着插
阅读全文
摘要:左偏树学习笔记 左偏树其实就是一个去实现可并堆这个数据结构的工具,其实完全可以用其他的写法,比如说配对堆,二叉堆,斐波那契堆等等,但是左偏树的写法更加常见,且使用起来更加方便,码量也不大。 我们一般可以用一个启发式合并实现 \(O(\log^2 n)\) 的合并,但是这个左偏树可以实现 \(O(\l
阅读全文
摘要:树状数组学习笔记 树状数组的使用场景:可差分且有结合律的运算符,如 ^ + * 树状数组优点:编码简单,常数小,但思维量较大。 板子: struct B_tree { int c[N]; void clear(){ memset(c,0,sizeof c); } void add(int x,int
阅读全文
摘要:分治及分治优化学习笔记 前言 这里的分治主要将的是普通分治技巧,cdq分治,线段树分治的应用,树上的点分治之类的可能会再开一个专题(主要是现在作者还不会),先把基础打好。 普通分治 分治主要分为两种——最值分治和中点分值,顾名思义,就是一个取一个区间的最大值/最小值,而一个是直接取中间点即可。分治的
阅读全文
摘要:缩点(图的联通)学习笔记 图论的真神——tarjan 其实这个没什么好写的,主要就是缩完点之后树上问题,难点反而是树上的问题。 具体运用——2-sat 强联通缩点,可以类比一个树上的问题?但是有非树边,这里的非树边可以有前向边(就是指向祖先),后向边(指向子孙),横叉边(除了上面的边),很明显后向边
阅读全文
摘要:2_sat 学习笔记 SAT 是适定性(Satisfiability)问题的简称,这里只讲 2_sat 是因为这个问题不是npc 问题 是可解的。 一般来说,就是设置两个变量,分别是 \(a\) 和 $\lnot a $ 这里的 \(a\) 是一个表达式,比如这个人是否选,这个值是否小于一个值之类。
阅读全文
摘要:前情提要:现在的整体二分已经不独属于 cyt 了!!! 整体二分跟分治很像(好吧就是用分治实现的),而且符合二分的思路。 这个分治需要记 \(l,r,ql,qr\) 分别是二分的上下界和询问的区间。 把在 \([l,mid]\) 的询问拎出来,\([mid+1,r]\) 的询问拎出来,继续二分即可。
阅读全文
摘要:决策单调性 dp 学习笔记 对于决策单调性 dp ,是指的对于 \(dp_i\) 的最优决策点 \(f_i\) 。当 \(i<j\) 时,\(f_i<f_j\) 或者 \(f_i>f_j\)。 如何证明呢?(其实直接打表就可以了) 这里令 \(dp_i=\max(dp_j+w(j,i))\) 要使
阅读全文
摘要:树剖学习笔记 树链剖分是一种将树剖分成若干条链,维护树上信息的方式。 树链剖分大多指的是重链剖分,还有长链剖分和实链剖分。 我们先给出几个定义: 重儿子:子树大小最大的儿子。 轻儿子:除了重儿子以外的其他儿子。 重边:连接重儿子的那一条边。 轻边:连接轻儿子的那一条边。 重链:将连续的重边相连成为的
阅读全文
摘要:李超线段树学习笔记 李超线段树是一个维护一次函数的一种数据结构,通常来优化 dp。 跟线段树的原理是一样的,这里线段树的节点记的是一个线段的整体的最优线段,也就是一般的线段树的永久化标记。 这里讲一下如何区间修改。 如果这个节点不被区间包含,按一般的线段树往下递归。 如果更新的节点比原节点整体优,直
阅读全文
摘要:guass 消元 高斯消元是一种解决多元一次线性方程组的通解,时间复杂度是 \(O(n^3)\) 的。 比较常规的思路就是把一个方程矩阵通过上下相加减的模式变换成一个倒三角的矩阵,然后从下往上消元,这样可以变换成 \(a_ix_i = b_i\) 的形式,即可得到解。 当然这样的形式会有无解的情况,
阅读全文
摘要:二分图是一种特殊的图模型,它可以分成两组互不相交的子集,子集内部没有任何直接连边。 判断二分图比较简单,直接黑白染色即可,若有没有矛盾,就是二分图,否则不是。 现在给出一些定义: 匹配:给定一个二分图 \(G\),在 \(G\) 的一个子图 \(M\) 中,\(M\) 的边集 \({E}\) 中的任
阅读全文
摘要:点分治&动态点分治学习笔记 点分治 在学习点分治之前需要了解中点分治,我们在处理每一个区间的信息之和的时候,需要通过分治的方式快速的解决,时间复杂度是 \(O(n\log n)\) 的,十分优秀。而在树上的问题,我们也可以使用对应的方式,即点分治。而对于一个树上的中点可以理解为树的重点,每次搜索时,
阅读全文
摘要:组合计数学习笔记 这不数学专题吗,为什么还有学习笔记 基础的就不讲了,这里写一点不基础点的。 Lucas 定理: 有 \(C_{m}^{n} \equiv \prod C_{m_i}^{n_i} (\bmod p)\)。可以在 \(p\) 较小的时候快速求组合数。 \(C_n^rC_r^k = C_
阅读全文
摘要:\(hash\) 这里的 hash 就是数位 hash ,注意在离线赛考虑多模数 hash。 这里讲一下树 hash。 \(h_x = f({h_i|i\in son(x)})\) \(f\) 为集合对整数的映射。 \(f_S = (c+\sum_{j\in S} g(j))\)。 \(g\) 为一
阅读全文
摘要:浅谈 FFT 单位根 定义:单位根 \(w_n^k\) 表示将单位圆 \(n\) 等分,在第 \(k\) 个复数的值。 显然的 \(w_{n}^0 = w_n^n=1\) 而 \(w_n^{k}\) 也可以理解为 \(x^n=1\) 的解集。 对于 \(w_n^k\) 。因为 \(e^{2k\pi
阅读全文
摘要:二进制分组学习笔记 二进制分组,一种将较在线的东西,加一个 \(\log n\) 变成在线的技术。 具体来讲,就是你将元素的个数用二进制表示,比如 \(23 = 2^4 + 2^2 + 2^1 + 2^0\) ,那就有 4 个容器,分别放 16个元素,4个元素,2个元素,1个元素。每一次增加,就往后
阅读全文
摘要:WQS 二分 有一类问题,是从 \(n\) 个物品中恰好选择 \(k\) 个,而且如果没有恰好 \(k\) 个的限制的话,那就变得比较简单的题目。如果只有这样的限制的话,可以贪心来写。但是一般收益不是固定的,一般可以使用 WQS 二分来写。 举一个例子: 在分布在一条直线上的 \(n\) 个村庄中选
阅读全文

浙公网安备 33010602011771号