<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[K1385170的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/K1385170</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; K1385170]]></copyright><item><title><![CDATA[【模板】组合数取模]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706437</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706437</guid><author>K1385170</author><pubDate>Sun, 29 Sep 2019 14:58:00 +0800</pubDate><description><![CDATA[\(N \le 2000, M \le 2000\)
直接利用递推式预处理即可。
代码如下
#include &lt;bits/stdc++.h&gt;

using namespace std;

const int mod = 1e9 + 7;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.ti...]]></description><category></category></item><item><title><![CDATA[【模板】多项式求逆]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706435</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706435</guid><author>K1385170</author><pubDate>Sat, 28 Sep 2019 00:29:00 +0800</pubDate><description><![CDATA[代码如下
#include &lt;bits/stdc++.h&gt;

using namespace std;

typedef long long LL;

const LL mod = 998244353, g = 3, ig = 332748118;

inline LL fpow(LL a, LL b) {
    LL ret = 1 % mod;
    for (; b...]]></description><category></category></item><item><title><![CDATA[【模板】线性基]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706434</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706434</guid><author>K1385170</author><pubDate>Fri, 27 Sep 2019 20:26:00 +0800</pubDate><description><![CDATA[线性基主要用于解决子集异或问题。
#include &lt;bits/stdc++.h&gt;

using namespace std;

typedef long long LL;

struct linear_basis {
    vector&lt;LL&gt; s;
    int n, zero;
    linear_basis(int _n) {
        n =...]]></description><category></category></item><item><title><![CDATA[【洛谷P2387】魔法森林]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706433</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706433</guid><author>K1385170</author><pubDate>Thu, 26 Sep 2019 19:27:00 +0800</pubDate><description><![CDATA[题目大意：给定一个 N 个点，M 条边的无向图，边有两个边权 a, b，求从 1 号节点到 N 号节点路径的两个权值和的最大值最小是多少。
题解：
对于有两个属性的结构的最优化问题，可以考虑先按照其中一个分量进行排序。接着从小到大枚举这个有序的分量，计算以当前枚举到的值为这一分量的最大值时，全局的最优解是多少。因此，需要高效维护的是如何求出另一个分量的最优解。
对于这道题来说，考虑对 a...]]></description><category></category></item><item><title><![CDATA[【模板】后缀自动机]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706432</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706432</guid><author>K1385170</author><pubDate>Wed, 25 Sep 2019 18:17:00 +0800</pubDate><description><![CDATA[后缀自动机是一个能够接受母串所有后缀的最简自动机。
其中，每个节点代表一个字符串集合，该集合中所有的字符串均有相同的 \(right\) 集合。
各个节点之间根据 \(right\) 集合的关系可以组织成一棵树形结构，称为 \(parent\) 树。
后缀自动机最多有 \(2*n - 1\) 个节点。
代码如下
#include &lt;bits/stdc++.h&gt;

using ...]]></description><category></category></item><item><title><![CDATA[【模板】矩阵求逆]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706431</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706431</guid><author>K1385170</author><pubDate>Mon, 23 Sep 2019 22:35:00 +0800</pubDate><description><![CDATA[\[
PA=E, PE=P
\]
按照定义，P 即为 A 的逆矩阵。矩阵乘法可以看作是对右边矩阵的一个线性变换，即：A 经过 P 的线性变换变成了 E，E 经过同样的线性变换变成了 P。因此，只需要在高斯消元 A 矩阵，将 A 变成单位矩阵的同时，维护一个单位矩阵，做与 A 完全相同的线性变换即可得到逆矩阵。
代码如下
#include &lt;bits/stdc++.h&gt;

us...]]></description><category></category></item><item><title><![CDATA[【hdu5517】Triple]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706430</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706430</guid><author>K1385170</author><pubDate>Mon, 23 Sep 2019 19:42:00 +0800</pubDate><description><![CDATA[题目大意：给定一个二元组集合A{&lt;a, b&gt;}， 一个三元组集合B{&lt;c, d, e&gt;}， 定义 C 为 A 和 B 在 {b = e} 上的连接，求 C 集合中凸点的个数，即：最值点的个数。
题解：
C 为一个三元组集合，求凸点的个数问题等价于三维偏序问题，去重之后可以直接计算。
不过，发现若直接暴力进行连接运算，最坏情况下会产生 \(O(NM)\) 个 C 元...]]></description><category></category></item><item><title><![CDATA[【模板】多标记 LCT]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706428</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706428</guid><author>K1385170</author><pubDate>Sat, 21 Sep 2019 22:15:00 +0800</pubDate><description><![CDATA[代码如下
#include &lt;bits/stdc++.h&gt;

using namespace std;

typedef long long LL;

const int mod = 51061;

struct node {
  node *l, *r, *p;
  int rev, val;
  LL sum, add, mul, sz;
  node() {
    l...]]></description><category></category></item><item><title><![CDATA[【洛谷P4172】水管局长]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101705980</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101705980</guid><author>K1385170</author><pubDate>Sat, 21 Sep 2019 11:32:00 +0800</pubDate><description><![CDATA[题目大意：给定 N 个点，M 条边的无向图，支持两种操作：动态删边和查询任意两点之间路径上边权的最大值最小是多少。
题解：
引理：对原图求最小生成树，可以保证任意两点之间的路径上边权的最大值取得最小值。
证明：任取两点 x, y，若 x, y 的路径上最大值最小的边不在最小生成树的路径上，可以将那条边加入最小生成树中，并删去由这条边的加入所带来的环中边权最大的那条边，可以使得最小生成树更...]]></description><category></category></item><item><title><![CDATA[【模板】LCT]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101705986</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101705986</guid><author>K1385170</author><pubDate>Wed, 18 Sep 2019 23:04:00 +0800</pubDate><description><![CDATA[\(LCT\) 是解决动态树问题的一种强力的数据结构，这种数据结构维护的是由若干 \(splay\) 节点构成的森林。
\(LCT\) 结构中采用了实链剖分的策略，即：将树边划分为实边和虚边，其中实边指的是 \(splay\) 节点通过节点中儿子指针相连的边，虚边指的是通过父节点指针相连的边。实边所构成的所有点在同一棵 \(splay\) 中，虚边连接不同的 \(splay\)。这样，就...]]></description><category></category></item><item><title><![CDATA[【CF786B】Legacy]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706427</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706427</guid><author>K1385170</author><pubDate>Mon, 16 Sep 2019 18:32:00 +0800</pubDate><description><![CDATA[题目大意：初始给定 N 个点，支持三种操作：两点之间连边；一个点与一个连续区间编号的点之间连边；一个连续区间内的点和一个点连边，求执行 N 次操作之后的单源最短路。
题解：学会了线段树优化建图。
发现若暴力进行连边，时间和空间都会被卡到 \(O(n^2)\)，直接起飞。
发现连边的点的编号是连续的，结合线段树可以维护连续区间信息的思想，就产生了线段树优化建图的方法。
在初始的 N 个节点...]]></description><category></category></item><item><title><![CDATA[【模板】单峰函数求极值]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706426</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706426</guid><author>K1385170</author><pubDate>Mon, 16 Sep 2019 15:03:00 +0800</pubDate><description><![CDATA[这里采用的是求导+二分的做法。其中用到了多项式的单点求值算法，即：秦九韶算法，对于一个 N 次多项式的单点求值，只需要做 N 次乘法和 N 次加法即可求出在某点处的值。
代码如下
#include &lt;bits/stdc++.h&gt;
using namespace std;
const double eps = 1e-6;

int main() {
    ios::sync_...]]></description><category></category></item><item><title><![CDATA[【CF750E】New Year and Old Subsequence]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706425</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706425</guid><author>K1385170</author><pubDate>Tue, 10 Sep 2019 20:33:00 +0800</pubDate><description><![CDATA[题目大意：给定一个长度为 N 的字符串，定义一个字串是“好的”，当且仅当字串中含有一个 “2017” 的子序列，且不含有 “2016” 的子序列。现给出 M 个询问，每次询问区间 [l, r] 内至少删去多少个字符才能使得该区间变成“好的”。
题解：
由于题目中要求的是子序列，且序列长度仅为 4，考虑状压，即："" -&gt; 0, “2” -&gt; 1, "20" -&gt; 2, ...]]></description><category></category></item><item><title><![CDATA[【洛谷P2147】洞穴勘测]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706424</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706424</guid><author>K1385170</author><pubDate>Thu, 05 Sep 2019 20:50:00 +0800</pubDate><description><![CDATA[题目大意：维护 N 个点的无向图，支持动态加边和删边，回答两点的连通性。
题解：线段树分治 + 可撤销并查集
询问可以离线，这是线段树分治的基础。
建立在操作时间轴上的线段树称为线段树分治算法。
本题中线段树维护的是当前时间段中出现的边的集合。分析可知，对于一条边来说，至多出现在线段树上 \(O(logm)\) 个节点的集合中，至多 \(M\) 条边，因此，线段树上的边集合大小一共为 \...]]></description><category></category></item><item><title><![CDATA[【HDU6635】Nonsense Time]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706423</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706423</guid><author>K1385170</author><pubDate>Wed, 04 Sep 2019 00:17:00 +0800</pubDate><description><![CDATA[题目大意：给定一个长度为 N 的序列，开始时所有的位置都不可用，每经过一个时间单位，都会有一个位置被激活。现给定激活顺序的序列，求每次激活之后全局的最长上升子序列的长度，保证数据随机。
题解：
引理：数据随机的情况下，一个长度为 \(N\) 的序列的最长上升子序列的期望长度为 \(O(\sqrt n)\)。（暂时不会证明qaq）
发现若正序考虑，判断每次被激活位置的值是否对当前全局最优解...]]></description><category></category></item><item><title><![CDATA[【银川网络赛G】Factories]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706421</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706421</guid><author>K1385170</author><pubDate>Tue, 03 Sep 2019 20:38:00 +0800</pubDate><description><![CDATA[题目大意：给定一棵 N 个节点的树，边有边权，选定 M 个叶子节点，使得任意两个叶子节点的树上距离之和最小，求最小值是多少。
题解：任意两点的树上距离和问题应从边的贡献角度考虑。
设 \(f[u][i]\) 表示以 u 为根的子树中，选了 i 个叶子节点的最优解，状态转移方程为：
\[
f[u][i + j] = min(f[u][i + j], f[u][i] + f[v][j] + ...]]></description><category></category></item><item><title><![CDATA[【2019银川网络赛】L：Continuous Intervals]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706420</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706420</guid><author>K1385170</author><pubDate>Tue, 03 Sep 2019 15:47:00 +0800</pubDate><description><![CDATA[题目大意：给定一个长度为 N 的序列，定义连续区间 [l, r] 为：序列的一段子区间，满足 [l, r] 中的元素从小到大排序后，任意相邻两项的差值不超过1。求一共有多少个连续区间。
题解：单调栈 + 线段树
首先，对于区间计数类问题常规的思路是枚举区间的左端点或右端点，统计以该点为端点的区间个数，加入答案贡献。
对于这道题来说，不妨枚举答案的右端点 r，那么对于每个 r，需要快速得出...]]></description><category></category></item><item><title><![CDATA[【模板】分治 FFT]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706419</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706419</guid><author>K1385170</author><pubDate>Fri, 30 Aug 2019 23:27:00 +0800</pubDate><description><![CDATA[题目大意：给定长度为 \(n - 1\) 的序列 \(g\)，求 \(f\) 序列，其中 \(f\) 为
\[
f[i]=\sum_{j=1}^{i} f[i-j] g[j]
\]
学会了分治 \(fft\)。
发现这个式子中也含有卷积，但是这是一个递推式，即：\(f\) 数组是未知的。
考虑分治策略，即：假设已经算出区间 \([l, mid]\) 的 \(f\) 值，现在要计算区间 \...]]></description><category></category></item><item><title><![CDATA[【洛谷P4173】残缺的字符串]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706418</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706418</guid><author>K1385170</author><pubDate>Thu, 29 Aug 2019 20:22:00 +0800</pubDate><description><![CDATA[题目大意：给定一个文本串和一个模板串，串中含有通配符，求文本串中有多少个位置可以与文本串完全匹配。
题解：利用卷积求解字符串匹配问题。
通配符字符串匹配的数值表示为 \[\sum\limits_{i = 0}^{m - 1}(a[i] - b[i + k])^2 a[i]b[i + k]=0\]。直接展开之后计算三个卷积即可。
需要注意的是：并不是所有 a[i] b[i + k] 均为循...]]></description><category></category></item><item><title><![CDATA[【HDU6709】Fishing]]></title><link>https://blog.youkuaiyun.com/K1385170/article/details/101706416</link><guid>https://blog.youkuaiyun.com/K1385170/article/details/101706416</guid><author>K1385170</author><pubDate>Wed, 28 Aug 2019 17:36:00 +0800</pubDate><description><![CDATA[题目大意：有 N 条鱼，每条鱼都有钓鱼和烤鱼的时间，钓鱼的时间均相同，每条鱼都有自己的烤鱼时间，一次只能烤一条鱼，且不能间断。现要求通过某种顺序将所有的鱼钓上来并烤完，求最小的时间是多少。
题解：
对于顺序可以自选的情况，可以从全局的角度进行考虑。对于最终状态，每条鱼被烤的时间和钓鱼的总次数是固定的，且一定要先钓上来一条鱼。最好情况就是所有的其他鱼均可以在烤鱼的时候钓上来。不过，可能会存...]]></description><category></category></item></channel></rss>