把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

小记

  • 线性基求第 \(k\) 大,先处理 \(p_i\),表示某一位上为 \(1\),其他数这一位是 \(0\) 的数,然后我们就会考虑选与不选,由于只有一个数这一位上有 \(1\),所以就转换成了二进制选取。

  • 什么时候线段树合并要新建节点?(更为厉害【湖南集训】)很显然,我不新建节点会导致一些线段树上面的信息改变,一般出现子再查询不同子树所要处理的信息时要用到。

  • 为什么模板2-sat要优先选拓扑序更大的?因为他有连边连向他,不能选了前面那个,因为一旦选择前面的,后面的也会被选择。

  • \(C(n,i)·C(i,m)\ne C(n,m)\),因为前者可能存在重复的情况,更合理的是 \(C(n,i)·C(i,m)=C(n,m)·C(n-m,i-m)\),后者成立是因为既选了小的那一部分,又选择了大的那一部分。

  • 长度为 \(2n\) 的括号序列,其中有 \(n\) 个左括号和 \(n\) 个右括号,其方案是 \((2n-1)(2n-3)\dots\),解释是考虑第 \(i\) 个括号从后面的匹配,然后删掉这两个已经匹配了的继续匹配即可。

  • 概率题可以转化成 \(dp\) 或者计数题目,计数题可以转化成概率题或者 \(dp\),这个非常重要。

  • 整体计算复杂时,可以考虑单个点对全局的贡献。

  • 一道很典的题目是无向图求任意点对的路径最小/最大值,考虑kruscal重构树之后st表+lca即可。

  • trick(agc052e),像字符串的相邻问题->mod字符集,转化为数字问题比如说差之类的。

  • \[gcd(x,lcm\{a_{1...n}\})=lcm(gcd(x,a_1),...,gcd(x,a_n)) \]

  • 一种经典的二进制题目可以考虑将某个数值拆成 \(2^k\times d\) 其中 \(d\) 为奇数,这也好像是 Miller_Rabin 的做法。

  • 当要判断一个分数是否时有限小数时候,只需要判断分子分母约分过后,分母的质因数分解只有 \(2,5\) 才是有限小数。

  • 逐位放括号必须合法,只需要考虑左括号满足:第一个左括号的位置 \(\leq 1\)、第二个 \(\leq 3\)……

  • 看到组合数乘上一个数的次幂可以想到用二项式定理化简式子。

  • 我们设二元组 \((l,r)\) 表示不存在 \([l,r]\) 的子区间(不为它本身)的 \(\text{mex}\)\([l,r]\)\(\text{mex}\),那么 \((l,r)\) 的个数是 \(2n\) 级别的。

  • 区间 \([l,r]\) 的匹配问题,如果包含区间可以忽略或者可以另类计算,那么剩下的按一二关键字排序那么他两个都是满足单调性的。

  • \(\max(f(x))=-\min(-f(x))\)

  • 合并石子的最大值可以贪心。转移。(好像最小值也可以用一些另类的贪心做法)

  • 算关于二进制的某些贡献的时候,可以考虑拆位进行计算,有时再提取一下公因子可以达到一种出奇制胜的方法。

  • 像询问最少进行几次操作达到 \(1\dots,n\),这是每个都要求,应当可以转化为进行 \(x\) 次操作最多可以……,最后进行二分或者什么的都行。

  • 对于一些范围过大(\(10^9\) 之类)的计数题,一般可以考虑离散化之后再乘上一些组合系数,这可以帮助我们化简问题。

  • 区间范围也可以映射为某些 \([,)\) 的区间。

  • 对于一些可以翻转同理的,可以考虑共同进行计算,来达到简化问题的目的。

  • 字典序最值问题可以考虑逐位贪心,然后每一位行不行做 \(check\) 就行了。一般这种题目就是要优化这个 \(check\)

  • 题目会有一些限制的时候,不妨先考虑这些限制所带来的情况,然后分类一下,或许能够找到思路。

  • 一般一些 gcd 计数问题不是莫反就是设 \(f(d)\) 表示为 \(d\) 的倍数,\(F(d)\) 恰好为 \(d\),然后直接:\(F(d)=\sum_{d\mid n}\mu(\frac n d)f(n)\)

  • \(\gcd(i,j)\leq i-j\leq i\text{ xor }j\),可以一位一位地去证明。

  • 带有特殊性质(我是指题目,不是数据!)的题目,可以通过手玩样例得出哦。

  • 一般而言,如果不是题目特殊,DAG(有向无环图)是没有什么性质的,请考虑其他的方法优化你的算法。

  • 对于某些括号匹配问题的构造(或者是非法变成合法),可以考虑先将他的左右括号一一匹配然后再进行调整,这个一一匹配可以贪心地将最左边和最右边的调整,然后对于前缀和的问题进一步再讨论。

  • 连续段至少或者相等为 \(k\),可以转化为某个区间的平均数至少或者等于 \(k\)

  • 相同值域问题求两边相等可以考虑相反数变成相加然后再加上值域最后可以用容斥解决,具体可以见到CSP模拟赛6 \(T_4\)

  • 一个有趣的数论公式:\(\prod_i\frac{1}{p_i^n}=1-\sum_i \frac{1}{p_i^n}+\sum_{i\ne j} \frac{1}{p_i^np_j^n}\dots\),这在莫比乌斯函数的容斥题目中有出奇制胜的效果,不过一般以可以通过 \(\omega(n)\) 来暴力做。

  • 动态加边和动态查询两点是否在同一个连通块中可以用并查集按秩合并(dsu on tree),存一下边的时间辍,然后查询两个点的时候暴力找这个路径,然后取最大值即可。

  • 要对直线表达式的dp式敏感,因为可能可以用李超线段树优化。

  • 多源bfs一般用于处理多点更新多点的情况,边权为 \(1\) 很重要。

树上两点路径求值

路径上求原值->其它值

经典可以用树链剖分。

如果说其它值是求最小可以考虑从小到大排完序后不搞之前跳过的点,可以用并查集路径压缩,每条边将会只经过 \(1\) 次。

求两两位运算的最大值/最小值(有点意思)

首先是 \(n\) 个数。注意这里是两两,不是若干个。

对于与运算

求最大值你会发现你保留的数可以到 \(\mathcal{O}(\log a_i)\),然后两两匹配即可。

设我们的答案为 \(M\),那么对于 \(>M\) 的数最多只有 \(\mathcal{O}(\log a_i)\) 个,因为我们需要保证至少不与我们的最大答案是 \(M\) 的条件不符合。

这种方法的优秀之处在于可以优化我们的候选答案。

求最小值你就只能字典树了,枚举每个数直接字典树找即可。

对于或运算

求最小值感觉是可以像与运算求最大值一样。

求最大值只能用字典树了。

对于异或运算

两者都只能用字典树。

posted @ 2025-08-02 15:02  high_skyy  阅读(10)  评论(0)    收藏  举报
浏览器标题切换
浏览器标题切换end