序列

首先 \(p_i \le \sqrt A_i, q_i \le \sqrt A_i\)

然后可以预处理出质数表,然后计算出每个数的 \(p_i\)\(q_i\),然后做一个简单的 dp。

注意这个是没有顺序的,小心一点,作者就差点错了

生成最小树

千万不要像作者一样,认为这题是把题目中的一开始的最小生成树弄小,因为使用操作会使最小生成树发生变化。

题目说让它成为最小生成树,那就让他当。

对于每条不在最小生成树的边 \((u, v)\),他这条边可以选择替换最小生成树上 \(u\)\(v\) 的路径上的任意一条边,如果这个路径上的任意一条边的边权都比他小,这样就不会最小生成树了。

互质序列

\(x | a\),则根据整除的性质,所以 \(x | x + a\)

那么照上面这么说,则只有顶多 \(25\) 个质数才会在 \([a, b]\) 中作为因数出现两次,所以你可以对可能出现至少两次的质数记录它是否以因数的方式出现已选数列当中( \(100\) 以内有 \(25\) 个质数。 )

相信 O(2) 的力量,所以 \(100 \times 2^{25} \le 10^8\)。(本质上不会太多的质数,所以不会超市。)

鬼鬼的序列

先不考虑 \(d = 0\) 的情况。

首先可以想到当 \(a_l, a_{l + 1}, a_{l + 2}, \dots, a_r\) 是一个合法区间的话,那么必然有 \(a_l \equiv a_{l + 1} \equiv a_{l + 2} \equiv \dots \equiv a_r ( \bmod d )\) 而且 \(\max \limits_{i = l} ^ {r} \frac{a_i}{d} - \min \limits_{i = l} ^ {r} \frac{a_i}{d} \le r - l + 1 + k\)。(可以放心除,因为余数相同)

移下项得到 \(\max \limits_{i = l} ^ {r} \frac{a_i}{d} - \min \limits_{i = l} ^ {r} \frac{a_i}{d} - l \le r + k + 1\)

根据合法区间的必要条件,我们可以将原数列根据 \(\bmod d\) 相等的分一段。

那么就只剩下 \(\max \limits_{i = l} ^ {r} \frac{a_i}{d} - \min \limits_{i = l} ^ {r} \frac{a_i}{d} - l \le r + k + 1\)

考虑枚举右端点,计算合法的最小左端点。

如果直接用线段树维护不等式左边的值,则不好处理区间最大和最小的变化,考虑用单调栈维护变化,并用线段树上二分计算答案。

注意,相等的是不能在合法的一组。(在 \(d \ne 0\) 的情况下)

如果 \(d = 0\),计算最长先等段。

posted on 2024-07-01 15:26  appear  阅读(11)  评论(0)    收藏  举报