摘要:
数论是数学对正整数进行研究的分支。筛法最初起源于找出质数的过程中。以下将浅谈数论中各种各样的筛法以及它们的应用。 质数,是指除了 \(1\) 和本身之外不能被任何正整数整除的数,即恰好只有两个因数。于是不难写出以下判断代码: bool isPrime(int x){ for(int i=2;i<=x 阅读全文
posted @ 2025-09-08 20:57
FormulaOne
阅读(17)
评论(0)
推荐(0)
摘要:
一个非常经典的套路是把所有括号从左到右压入栈中,如果栈顶能与当前的配对则消去。这样做符合题目中只能消除相邻括号的要求,并保证能消除的立刻消除,从而是正确的。最后判断栈是否为空即可。 时间复杂度 \(O(n)\)。 #include <iostream> #include <cstdio> using 阅读全文
posted @ 2025-09-08 18:46
FormulaOne
阅读(8)
评论(0)
推荐(0)
摘要:
模拟样例可以发现,操作本质上是将形如若干个 W 加上一个 A 的字符串变为同样长度的一个 A 加上若干个 C 的字符串。于是按照这个规则找到并替换这样的字符串即可。 时间复杂度 \(O(n)\)。 #include <iostream> #include <cstdio> using namespa 阅读全文
posted @ 2025-09-08 18:45
FormulaOne
阅读(8)
评论(0)
推荐(0)
摘要:
比较简单的 LIS 模板题。 回顾使用树状数组求解 LIS 问题的过程:用树状数组的下标表示 \(a\) 的值域,存储 \(f\) 的最大值。求解时在 \([1,a_i-1]\) 上取最大值,并更新到 \(a_i\) 对应的位置。 类似地,在本题中,询问前 \(R\) 个数且值不超过 \(X\) 的 阅读全文
posted @ 2025-09-08 18:45
FormulaOne
阅读(10)
评论(0)
推荐(0)
摘要:
由于 \(a_i \le 10^6\),故可以一遍求出 \([1,10^6]\) 内每个数的因数以及这个数的倍数在 \(a\) 中的出现次数。求完后对每个 \(a_i\) 暴力枚举因数,判断其倍数出现次数是否超过 \(k\) 并更新答案即可。 总时间复杂度 \(O(N\log N+nd(a_i))\ 阅读全文
posted @ 2025-09-08 18:45
FormulaOne
阅读(5)
评论(0)
推荐(0)
摘要:
有一个显然的结论,即最中间的 \(1\) 是固定不动的。考虑反证,假设左右各有 \(k\) 个 \(1\),且所有 \(1\) 不是往正中间的 \(1\) 移动,那么一侧 \(k\) 个移动距离减小,另一侧 \(k\) 个移动距离增加,显然不会更优,因此结论得证。\(n\) 为奇数时,最中间只有一个 阅读全文
posted @ 2025-09-08 18:44
FormulaOne
阅读(7)
评论(0)
推荐(0)
摘要:
直接按照题意模拟即可。如果输入的边已经存在或构成自环,则直接删去即可。注意需保证 \(u,v\) 的大小关系不变,判断边是否存在可使用 map。 #include <iostream> #include <cstdio> #include <map> using namespace std; map 阅读全文
posted @ 2025-09-08 18:44
FormulaOne
阅读(7)
评论(0)
推荐(0)
摘要:
树链剖分模板题。边权转点权的操作十分经典,用两个点中深度较大的存储边权(因为父亲唯一),然后就转化为点权的操作了。轻度卡常即可通过,比如线段树查询时写非递归版等。 时间复杂度 \(O(n \log n + q \log^2 n )\)。 #include <iostream> #include <c 阅读全文
posted @ 2025-09-08 18:44
FormulaOne
阅读(6)
评论(0)
推荐(0)
摘要:
A 性质 首先使用差分维护每个 \(a_i\) 的操作次数。 不难发现由于数的种类很少,因此直接用一个数组记录每个数 \(i\) 操作 \(j\) 次后的值。预处理完后,记 \(A\) 为 \(a_i\) 的最大值,则时间复杂度 \(O(mA)\)。 for( int i = 1 ; i <= 10 阅读全文
posted @ 2025-09-08 18:43
FormulaOne
阅读(10)
评论(0)
推荐(0)
摘要:
比较经典的生成函数题目。 不难发现题目中 \(B-A=C-B\) 可以化为 \(A+C=2B\)。于是问题转化为:对于一个给定的数 \(k\),在 \(S\) 中选两个数使它们的和为 \(k\)(这个 \(k\) 即是原来的 \(2B\))。 接着读题可以发现,\(S\) 是集合(即 \(S_i\) 阅读全文
posted @ 2025-09-08 18:43
FormulaOne
阅读(6)
评论(0)
推荐(0)
摘要:
读题可以发现,一个大的区间的答案是由三个小的区间的答案决定的。同时又要支持单点修改,因此可以用一个数据结构维护,比如线段树。在这个线段树中,每个非叶子节点有三个子节点。先建好原始的树,修改时定位到叶子节点,再向上更新答案即可,与普通线段树的操作类似。 时间复杂度 \(O(n+q\log n)\)。 阅读全文
posted @ 2025-09-08 18:43
FormulaOne
阅读(11)
评论(0)
推荐(0)
摘要:
除了树套树做法外,整体二分也是可以的。 整体二分的主要思想是:通过对值域进行一次二分,来求多个区间排名,从而替代了树套树中的权值线段树。具体地,我们把所有操作按时间先后顺序确定后,假设当前的值域中点为 \(mid\),那么按原顺序进行所有修改值不超过 \(mid\) 的操作,用对应的下标更新树状数组 阅读全文
posted @ 2025-09-08 18:42
FormulaOne
阅读(7)
评论(0)
推荐(0)
摘要:
考虑计算每对 \((a_i,a_j)\) 的贡献,即计算当 \(a_i\) 为最小值,\(a_j\) 为最大值时的方案数。将 \(a\) 排序后,显然 \((i,j)\) 中的元素可选可不选,\(i,j\) 必选,\([1,i)\) 和 \((j,n]\) 必不选,共有 \(2^{j-i-1}\) 阅读全文
posted @ 2025-09-08 18:42
FormulaOne
阅读(11)
评论(0)
推荐(0)
摘要:
点分治 适用于统计路径、点对问题: 核心思想:以当前子树的重心作为当前节点,将该子树内路径分为两类: 不经过重心,到子树递归即可 经过重心,直接计算每个点到重心的信息,用双指针等计算答案。 在重心处统计答案可能会有不合法(如同一子树两个点,先过来重心再原路返回),考虑容斥,先算总的,再算每棵子树独立 阅读全文
posted @ 2025-09-08 18:41
FormulaOne
阅读(12)
评论(0)
推荐(0)
摘要:
发现直接维护区间内每个数的出现次数并不好做。不妨把这个条件外推,假设 \([l,r]\) 中每个数的出现次数都是 \(k\) 的倍数,那么 \(\sum_{i=l}^r a_i\) 也是 \(k\) 的倍数,即后者是前者的必要条件,并且当 \(a_i\) 较大时,后者成立时前者成立的概率会越大。 因 阅读全文
posted @ 2025-09-08 18:39
FormulaOne
阅读(7)
评论(0)
推荐(0)
摘要:
赛后发现漏了一个显然性质,然后就过了,还是要多练。 这个显然性质是:如果有两个人初始等级分分别为 \(x,y\) 且 \(x<y\),那么在经历若干次比赛后,则 \(x\le y\),即相对大小不变化。为什么正确呢?对于一场比赛,如果 \(x\) 加分,\(y\) 不加分,则 \(x\) 最多与 \ 阅读全文
posted @ 2025-09-08 18:39
FormulaOne
阅读(8)
评论(0)
推荐(0)
摘要:
考场上读成数所有正方形的个数了,过了好久才发现是简单题。 考虑除了圆心所在行和列以外的格子分布状况。由圆的对称性可知,只需求出 \(\frac{1}{4}\) 个圆的格子个数即可。不难发现当横坐标确定时,最大的纵坐标也是确定的。于是可以直接枚举横坐标,并二分确定最大的纵坐标,即可获得该行的格子数量。 阅读全文
posted @ 2025-09-08 18:39
FormulaOne
阅读(9)
评论(0)
推荐(0)
摘要:
后记已经写了一部分。 Day 0 少上了几节课,又做了几道 POI 的经典题目,对明天比赛的信心勉强突破了 \(0\)。 Day 1 一大早到学校集中,然后坐大巴车去深圳。 深高果然又新又大,与大学十分相似。 发现本校的高中生基本在同一个考场,右边的右边是 ztz。 开考了。 把所有题看了一遍,T1 阅读全文
posted @ 2025-09-08 18:38
FormulaOne
阅读(9)
评论(0)
推荐(0)
摘要:
首先不难写出 \(O(n^2)\) 的 dp。设当前在第 \(i\) 个位置,从前面选择一个位置 \(j\),并加上 \([j+1,i]\) 这一段的贡献(可以预处理),取最小值即可。 #include <iostream> #include <cstdio> #include <map> usin 阅读全文
posted @ 2025-09-08 18:38
FormulaOne
阅读(9)
评论(0)
推荐(0)
摘要:
一眼 dp。 设 \(f_i\) 表示从第 \(i\) 个位置出发能跳到的最大值。考虑从后往前枚举,对于当前位置 \(i\),其往前跳到的最大值即为 \(a\) 的前缀最大值。而如果先往后跳,那么就可以跳到比 \(a_i\) 小的位置。而这些位置能跳到的最大值已经计算好了,因此可以直接使用。转移的位 阅读全文
posted @ 2025-09-08 18:38
FormulaOne
阅读(6)
评论(0)
推荐(0)

浙公网安备 33010602011771号