摘要:
BSGS int BSGS(int a , int b){ int y = sqrt(p) + 1; gp_hash_table<int , int> mp; int t = b; for(int n = 0; n <= y; ++ n , t = Mul(t , a)) mp[t] = n; in 阅读全文
摘要:
首先我们考虑最暴力的方法,仿照着 LIS 板子题设计状态:\(dp_{i,j}\) 表示考虑前 \(\max(i,j)\) 个,单减序列以 \(i\) 结尾,单增序列以 \(j\) 结尾,然后进行 \(O(1)\) 的转移。 但是这样状态数就爆炸了,如何优化状态数呢? 我们考虑进行换维。因为我们刚刚 阅读全文
摘要:
状态数是 \(O(nm^2)\) 的DP很好想,就是 \(dp_{i,l,r}\) 表示第 \(i\) 次的区间为 \([l,r]\) 的方案数。 但是这个状态数就已经死了,而题目又提示 \(n\times m \leq 1e7\) ,说明状态只能形如 \(dp_{i,j}\)。 这时就会想到一个简 阅读全文
摘要:
统计路径数量,考虑点分治试试。那么问题就转化为对于每一个点 \(u\),给定四个点集,第一组与第二组考虑贡献,第三组与第四组考虑贡献。考虑 \(A,B\) 集合之间的贡献即计数二元组 \((a,b) a \in A,b \in B\) 满足 \(d_a + D_b \times 10^{\text{ 阅读全文
摘要:
对于这种树上路径统计问题,一个经典解法就是点分治。 如果没有两个限制,还是很简单的,对于单个限制,使用树状数组来解决就行了。 但是这道题目要求两个限制,有点像二维偏序,但不完全是。可以说是分成了几个段,每个段之间求二维偏序,而要求段内不能产生贡献。如果这么表述这个问题的话,那就很好解决了:把段内的贡 阅读全文
摘要:
本文核心卖点:用树状数组神秘地维护哈希(不如另一篇题解巧妙,内含简单数论知识)。 观察到,走这个操作的可行性关于走的步数有单调性,考虑二分走的步数。 那么如何判断从点 \(x\) 走 \(mid\) 步的可行性呢?树的结构是固定的,每一种走法(路径上每个点儿子的排名构成的序列)与走到某个重点一一对应 阅读全文
摘要:
数论分块 若可以 \(O(1)\) 计算 \(f(r) - f(l)\),那么就可以 \(O(\sqrt n)\) 计算 \(\sum^n_{i = 1} f(i)g(\lfloor\frac{n}{i}\rfloor)\)。 关于 \(l , r\) 的含义与计算: 含义:\(\forall x 阅读全文
摘要:
考场上上厕所的时候灵机一动,为什么不倍增呢? 考虑如何倍增。 \(f[s][dir][x][y] = \{x',y',di'\}\)。 表示从点 \((x,y)\) 开始以 \(dir\) 的方向走 \(2^s\) 步,走到了点 \((x',y')\) ,在 \((x',y')\) 上的方向为 \( 阅读全文
摘要:
看到题,感觉像树形DP,遂设计DP式子。 \(dp_u\) 表示以 \(u\) 为根的子树内最多能删多少次(不删 \(u\))。 那么每次子节点到父节点增加的贡献就是 \(\lfloor\frac{子树大小为1的子节点个数}{k}\rfloor\)。 得出式子 \(dp_u = \sum_{v\in 阅读全文
摘要:
最近准备学数据结构乱搞,接下来学k-d tree 大致介绍 可以使用整体二分解决的题目需要满足以下性质: 1.询问的答案具有可二分性 2.修改对判定答案的贡献互相独立,修改之间互不影响效果 3.修改如果对判定答案有贡献,则贡献为一确定的与判定标准无关的值 4.贡献满足交换律,结合律,具有可加性 5. 阅读全文
摘要:
这次集训有收获也有不足 收获 1.学会了广义扫描线,反演,对数据结构,扫描线的理解进一步加深 2.学会了Dinic最大流,Dinic最小费用最大流,对网络流模板,网络流建模了解的更深刻 3.学会了新算法:线性基,并且这几天做了一些位运算的题目,对位运算的性质有了更深刻,全面的了解 4.学会了DP的s 阅读全文