洛谷秋令营 Day 1

倍增

LCA

预处理点 \(i\) 的第 \(k\) 级祖先 \(dp_{i,k}\),\(dp_{i,k}=dp_{dp_{i,k-1},k-1}\)。

在求解 \(a,b\) 的 LCA 时,考虑先把深度较深的点跳到同一深度,这部分深度二进制拆分是 \(O(\log n)\) 的。

此时,我们同时上跳,由于直到跳到两个点的父亲一样为止,为它们的最近公共祖先。

ST 表

预处理从 \(i\) 开始,长为 \(2^k\) 的 \(\min / \max\) 值。

查询区间 \([l,r]\) 时,设 \([l,r]\) 长度不超过 \(2^{k+1}\),答案即为 \(\min / \max _{dp_{l,k},dp_{r-2^k+1,2^k}}\),这是因为 \(2^k + 2^k \ge 2^{k+1}\)。

CF1142B Lynyrd Skynyrd

最近 Lynyrd 和 Skynyrd 去了一个商店,在那里 Lynyrd 买了一个长度为 \(n\) 的排列 \(p\),Skynyrd 买了一个一个长度为 \(m\) 的数列 \(a\),并且 \(a_i \in[1,n], a_i \in Z\)。

Lynyrd 和 Skynyrd 感到无聊,所以他们给了你 \(q\) 个询问,每个询问格式如同:“ \(a\) 的子段 \([l, r]\) 是否有一个子序列 \(s\),满足 \(s\) 是 \(p\) 的一个循环移位?”请你回答这些询问。

一个长度为 \(n\) 的排列是一个由 \(n\) 个整数组成的序列,满足从 \(1\) 到 \(n\) 的所有整数在其中恰好出现 \(1\) 次。

一个排列 \((p_1, p_2, \ldots, p_n)\) 的循环移位是排列 \((p_i, p_{i+1}, \ldots, p_n, p_1, p_2, \ldots, p_{i-1})\),其中 \(i \in [1, n]\)。例如: \((2, 1, 3)\) 有 3 个显然的循环移位:\((2, 1, 3); (1, 3, 2); (3, 2, 1)\)。

一个序列 \(a\) 的子段 \([l, r]\) 的子序列是一个序列 \(a_{i_1}, a_{i_2}, \ldots a_{i_k}\),其中 \(l \leq i_1 < i_2 < \ldots < i_k \leq r\)。

\(1 \leq n, m, q \leq 2 \times 10^5\)。

sol

考虑 \(i\) 后面的数一定都是一定的,考虑倍增,预处理出从 \(i\) 开始跳 \(n-1\) 跳到的最小位置 \(b_i\)。

问题即为 \([l,r]\) 是否存在 \(b_i \le r\)。

这里可以直接使用 ST 表,但是我们发现 \(b_i \ge i\),于是直接预处理后缀 \(\min\) 就好了。

CF1848F Vika and Wiki

最近,Vika 正在研究她最喜欢的互联网资源——Wikipedia。

在 Wikipedia 的广阔天地中,她了解到了一种有趣的数学运算——按位异或(bitwise XOR),记作 $ \oplus $。

Vika 开始研究这种神秘运算的性质。为此,她取了一个由 $ n $ 个非负整数组成的数组 $ a \(,并对其所有元素同时进行如下操作:\) a_i = a_i \oplus a_{(i+1) \bmod n} $。这里 $ x \bmod y $ 表示 $ x $ 除以 $ y $ 的余数。数组的下标从 $ 0 $ 开始。

由于仅进行一次上述操作还不足以彻底研究,Vika 会不断重复该操作,直到数组 $ a $ 变为全零。

请你判断,最少需要进行多少次上述操作,才能使数组 $ a $ 的所有元素都变为零。如果永远无法变为全零,则输出 $ -1 $。

$ 1 \le n \le 2^{20} $

保证 \(n\) 可以表示为 \(2 ^ k\),其中 k 是某个整数 \(0 \le k \le 20\)

$ 0 \le a_i \le 10^9 $

sol

设 \(f_{i,j}\) 为第 \(i\) 次操作后,

posted @ 2026-10-02 12:48  easy42  阅读(12)  评论(0)    收藏  举报