自闭集训 Day5 树上数据结构 前置知识 点分治 边分治 树链剖分 LCT Top Tree LCT时间复杂度 线段树每次查询是严格\(\log n\)的,然而splay维护连续段的时候,如果每次查询可以缩点,那么访问的区间数是均摊\(O(1)\)的.(??) 所以用splay维护LCT是一个log,而线段树维护就是两个log. 捉迷藏 边分治多好,干什么点分治-- 每个点开个堆维护子树最远点.开个堆维护儿子最远点的前二大的值.开个堆维护全局最大值,然后随便搞. 边分治由于每次只需要合并两个子…
自闭集训 Day5 生成函数 一般生成函数 无脑地把序列变成多项式: \[ \{a_i\}\rightarrow A(x)=\sum_{n} a_nx^n \] 形式幂级数 生成函数是一种形式幂级数.我们不关心这个函数的具体的取值,只关心多项式的系数.在需要的时候可以把\(x​\)当成任意值. 例题 求\(\{n^2\}\)的生成函数. 这个--只要知道\(\{{n+k-1\choose k-1}\}\)的生成函数是\(\frac 1 {(1+x)^k}\)就没了. 例题 简单生成函数题,不讲了…
自闭集训 Day1 数据结构 CF643G 用类似于下面的方法,搬到线段树上. 如何合并两个集合?先全部放在一起,每次删掉最小的\(cnt_i\),然后把其他所有的\(cnt\)都减去\(cnt_i\),直到还剩下\(k\)个. \(O(n)\)众数 如果众数出现次数大于\(n/2\),那么搞一个\(cnt\)和一个\(ans\).从左往右扫,如果与\(ans\)相同那么\(++cnt\),否则\(--cnt\).如果\(cnt<0\)那么更换\(ans\). 如果大于\(n/3\),那么搞两个…
自闭集训 Day6 计算几何 内积 内积不等式: \[ (A,B)^2\le (A,A)(B,B) \] 其中\((A,B)\)表示\(A\cdot B\). (好像是废话?) 叉积 \[ A\times B=|A||B|\sin \theta \] 二维叉积:\(A\times B=x_1y_2-x_2y_1\). 三维叉积: \[ A\times B=\left| \begin{matrix} i&j&k\\ Ax&Ay&Az\\ Bx&By&Bz \e…
自闭集训 Day7 分治 主定理 由于我沉迷调题,这个地方没听课. 某些不等式 咕了 nth_element 使用快速排序的思想,选一个中间点,看左右有多少个. 期望复杂度\(O(n)\). 首先把一个序列分成5份,每份大小\(n/5\),叠成一个矩阵,对每一列进行排序. 现在中间一行就是每一列的中位数,递归下去求它的中位数. 然后把中位数比他小的列放左边,比他大的放右边. 于是我们知道至少\(0.3n\)比他小/比他大,也就是至多\(0.7n\)比他小/比他大. 于是我们找到了一个比较好的轴点…
自闭集训 Day7 动态规划 LOJ6395 首先发现这个树的形态没啥用,只需要保证度数之和是\(2n-2\)且度数大于0即可. 然后设\(dp_{i,j}\)表示前\(i\)个点用了\(j\)个度数的最小值,然后就获得了\(O(n^3)\)的DP. 不妨每个点的度数都减1,那么总度数就变成\(n-2\)了. 考虑原来\(i\)的作用是什么:要限制选的点数不能超过\(n​\). 此时我们总度数小于\(n\),所以只要度数不为0的点的总度数不超过n-2那么就肯定有点数不超过n.所以我们可以先认为所…
自闭集训 Day3 字符串 SAM 考虑后缀树. SAM的parent树是反串的后缀树,所以后面加一个字符的时候相当于往串前面加一个字符,恰好多出了一个后缀. 于是可以以此来理解SAM. 每一条路径对应原串的一个子串. 每一个终止节点对应一些后缀. 所有到同一个点的路径对应的子串互为后缀,长度连续. parent树是反串的后缀树. SAM可以用来构造SA.(???) 回文树 一个串的本质不同的回文子串的个数是\(O(n)​\)的. 每个点只表示一个回文串. SAM和回文树的复杂度都是均摊的,所以…
自闭集训 Day3 图论 NOI2019 D2T1 没有真正建出图来的必要,可以直接打取\(\min\)的\(tag\). 也可以把边压进堆里,然后变成一个二维清点问题(???),然后就线段树+并查集(???). POI 2014/2015 某题 类似于GDOI2019,线段树或者堆直接做. Gym101372 E 首先肯定要缩点. 给每个点赋一个随机权值,然后把每一个点的权值更新成能到的所有的点权值的min. 由于\([0,1]​\)的\(n​\)个随机权值的\(\min ​\)期望是\(\f…
自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\(f(x)\)表示最后一个数小于等于\(x\)的答案,从左往右加入数并维护\(f(x)\). 加入\(A\)的时候\(f(x)\)要加上\(|x-A|\),再对\(f(x-1)\)取min. 显然\(f(x)\)是一个分段函数,而且斜率是连续整数. 于是只需要维护拐点就可以知道函数长什么样.每次就是…
自闭集训 Day2 线性代数 高斯消元 做实数时,需要找绝对值最大的作为主元,以获取更高精度. 在欧几里得环(简单例子是模合数)意义下也是对的.比如模合数意义下可以使用辗转相除法消元. 欧几里得环:对于任意\(a,b\),都可以定义\(a=qb+r\ \ (|r|<b)\),于是可以辗转相除.(显然,多项式环也是欧几里得环) 逆矩阵 方法与高斯消元类似,左边摆一个原矩阵,右边摆一个单位矩阵,高斯消元的过程中左边的行操作都在右边同样做一遍.最后左边剩下一个单位矩阵,右边就是逆矩阵. 对于方程\(A…