题目杂选

不定期更新

Q.

\(n\) 个区间 \(\left [ l,r\right ]\),给每个区间分组,使每个组内的区间两两不交,求最小的组数。

A.

结论:组数 \(k\) 是合法的,当且仅当不存在一个点被所有区间覆盖 \(> k\) 次。

证明:定义两个区间的偏序关系,\(b < c\)\(\left [ a,b\right ]< \left [c,d\right]\)。那么问题等价于最小链覆盖,根据 Dliworth定理最小链覆盖等于最长反链。在反链中的任意两点不存在偏序关系,所以反链中的所有区间交集不为空,因为不存在一个点被覆盖 \(k\) 次,所以最长反链 \(\le k\),即最小链覆盖 \(\le k\)

通过这个结论,我们只需一个支持区间加,全局最大值的数据结构即可。

Q.

给定一个序列 \(a\),支持两种操作:

  1. \(\forall i \in \left[l,r\right],a_i = a_i \oplus x\)
  2. \(\max \limits_{i=l}^{r} a_i\)

A.

因为有异或求最大值,不难想到 01trie,这个东西树套树是维护不了的,于是想到分块套 trie。

具体来说,对于每个块都开一颗 trie。在修改整块时可以直接打上 \(tag\),表示这个块被异或的值,在查询时直接查这个块中与 \(tag\) 异或值最大的即可。而散块可以将这个块的 trie 暴力重构,散块查询暴力即可,时间复杂度 \(O(n \sqrt n \log V)\)

卡常技巧:重构可以在查询的时候再执行。

Q.

\(n\) 条线段,第 \(i\) 条为 \(a_ix+b_i\)

你要选择 \(k\) 个在线段上的点,任意两个点的 \(x\) 坐标不同,\(x \in \left [ 1,k\right ]\),且 \(x\) 坐标相邻的两个点不能属于同一个线段。

特别地若一个点在多个线段上其可视为在其中一条线段上,而不是在所有线段上。

请你最大化 \(\sum_{i=1}^k y_i\)

A.

\(f_{i,j}\) 表示考虑到 \(x \le i\) 的点,上一个选的是第 \(j\) 条线段的最大值。

暴力转移是 \(nk\) 的,考虑优化,注意到只有前三大值对 \(f_i\) 有影响,用李超树维护前三大值即可

Q.

给定排列 \(a\),定义函数 \(f\left(l,r\right)=\left(\min_{i=l}^r a_i,\max_{i=l}^r a_i \right)\)。有 \(q\) 次询问,每次给定 \(l,r\),定义一次操作为令 \(\left(l,r\right)=f\left(l,r\right)\),求最少操作几次使得 \(l=1,r=n\)

A.

神秘找性质题。

首先有个性质 \(f \left( l,r \right)=\bigcup_{i=l}^{r-1} f \left ( i,i+1 \right)\),因为大区间是由小区间推出的,然后有个推论,\(f^k \left( l,r \right)=\bigcup_{i=l}^{r-1} f^k \left ( i,i+1 \right)\),可以归纳证明。

通过这个结论,倍增维护即可,时间复杂度 \(O(n \log^2 n)\)

Q.

给定排列 $ P_n $ 和整数 $ k $,求满足如下条件的点对 $ (l, r) $ 数量。

  • $ 1 \le l \le r \le n $。
  • $ \max_{i = l}^rP_i - \min_{i = l}^rP_i \le r - l + k $。

A.

一个与 \(k\) 无关的做法。

考虑分治,不跨过分治中心的区间的贡献直接递归统计即可,难点主要在跨过分治中心的区间的贡献。

\(\max\)\(\min\) 在计数时比较难处理,不妨钦定它们分别在左半区间还是在右半区间,分别计算每种情况的贡献,因为这是排列所以是不重不漏的。

  1. \(\max\)\(\min\) 在左半区间。枚举区间的左端点,此时右端点是单调不降的。直接双指针维护即可。

  2. \(\max\)\(\min\) 在右半区间。和第一种情况是本质相同的。

  3. \(\max\) 在左半区间,\(\min\) 在右半区间。同样枚举区间的左端点,考虑右端点的取值范围,不难发现右端点的取值范围是一个区间。因为 \(\max\) 限制了右端点的上界,而 \(\min\) 限制了右端点的下界,随着左半区间的后缀最小值不断变小,右端点下界肯定是递增的,而上界同理。所以问题变为对于一个区间满足一个不等式的点数,二维数点即可。

  4. \(\min\) 在左半区间,\(\max\) 在右半区间,与情况三同理。

实现时,二维数点我用的主席树,所以时间复杂度 \(O(n \log^2 n)\)

posted @ 2024-10-15 20:01  lyingOVO  阅读(32)  评论(0)    收藏  举报