摘要:
不明白各位 dalao 为什么能推式子这么简洁。 题目链接 来补一个 \(\text{dsu on tree+splay}\) 的大常数解法。 容易想到对每个点计算其为另外两点 \(\text{LCA}\) 的贡献。 最朴素的方法就是对每个点暴力统计其每个儿子的子树与其之前搜过的儿子的子树中每个点之 阅读全文
摘要:
原题链接 前言:希望大家在做数论题时不应仅仅局限于套路,更应清楚本质。 题意: 记 \(f(t)=\sum\limits_{k=1}^t k[\gcd(k,t)=1]\) 求 \(\sum\limits_{i=1}^n \sum\limits_{j=1}^n (i^2+j^2+ij)f(\gcd(i 阅读全文
摘要:
原题链接 提供一个易 (luan) 懂 (gao) 的分治算法。 容易发现如果将序列每次分成两半,每一半都得到了最优方案, 此时要做的就是在两块中分别找出一个数让其异或和最小,这可以用 \(\text{01trie}\) 轻松实现。 但不过此题中分的方法很有讲究,并不能直接取两端点的中点。 通过几次 阅读全文
摘要:
问题引入:CF896E 首先将原序列分块。 先看修改: 对于边角块直接暴力改,之后重构,至于重构什么下文会提及。 但整块的并不容易用什么东西直接维护。 观察到修改操作的值域较小,且每次修改后区间最大值单调不增, 于是每一块修改时可以考虑将区间最大值作为势能搞点事: 定义势能函数 \(\Phi=块内最 阅读全文
摘要:
题目链接 做此题前建议先做这题 虽然同样是求区间众数,但那题数据范围小得多,空间限制也较松,这题还得另辟蹊径。 考虑像那题一样分块,初始时用 \(O(n^{\frac{3}{2}})\) 的时间处理出两两块中众数的出现次数。 而由于空间限制不能处理出每个数在每个块之前出现总次数,以处理散块。 但事实 阅读全文
摘要:
线段树合并的时间复杂度一直是个玄学东西,这里稍微证明一下。 设原先需要合并的点的个数为 \(k\) ,初始势能为 \(3*k\) 定义势能函数 \(\Phi=3\times 参与合并的全部点的个数\), 当两颗线段树合并时,设其重合的点个数为 \(sz\) 而点重合时便会对其左右儿子继续合并,接下来 阅读全文
摘要:
题目链接 提供一个稍微不同的 cdq 分治写法,不依赖 \(K\) 的大小。 首先一个限制为 \(q\) 的值差距不大于 \(K\) 。 于是可以对 q 排完序后对每个下标 i 查 q 在 \(q_i+K\) 内的贡献减去 q 在 \(q_i-K-1\) 内的贡献, 这一维便可直接用 \(cdq\) 阅读全文
摘要:
原题链接 题面过长含糊不清差评 震惊!这题竟没有树状数组套可持久化 \(01trie\) 的题解,补一发。 思路极其简单,由于查询相当于是时间与标号两维限制下求与某个数的异或最大值。 那就可以对时间限制用一个树状数组解决,标号在每个时间下用一颗可持久化 \(01trie\) 就没了。 具体询问时要把 阅读全文
摘要:
题目链接 TopTree的板子怎么能用TopTree来写呢? 宣传一个并非 \(AAAT\) 的能保证时间复杂度的魔改 \(LCT\) 做法 更详细的介绍与时间复杂度分析:cnblog 洛谷blog 考虑用 \(splay\) 维护虚儿子, 但事实上如果单纯地让每个节点对应一个虚拟节点在对应的维护虚 阅读全文
摘要:
题目链接 题意:1. 换根 2. 路径覆盖 3. 查子树最小值 看到这样的题,显然一个 \(Top\) \(Tree\) 直接没了, 但我还要宣传一下一个并非 \(AAAT\) 的能保证时间复杂度的魔改 \(LCT\) 做法 (邪教) 更详细的介绍与时间复杂度分析:cnblog 洛谷blog 考虑用 阅读全文