CF1712 解题报告

CF1712 解题报告

地址

解题情况:成功 AC 了前三道,第四道假了,因为太困了就去睡觉了)

A

题意 给一个 1 1 1 n n n 的排列 p i p_i pi 和正整数 k k k,问对排列进行最少多少次的交换操作可以最小化排列的前 k k k 项和。

解答 容易发现,排列的前 k k k 项和最小时,前 k k k 项一定是一个 1 1 1 k k k 的排列,也就是我们最终的目标。所以,如果原排列前 k k k 个数中存在 > k > k >k 的数,那么就要把它和后 n − k n-k nk 个数中某个 ≤ k \le k k 的数互换位置。

最终答案为 ∑ i = 1 k [ p i > k ] \sum_{i=1}^k[p_i>k] i=1k[pi>k].

提交记录,稍微写的有点麻烦,因为没看到是排列。

B

题意 给出 n n n,请构造一个 1 1 1 n n n 的排列 p i p_i pi,使得 ∑ i = 1 n lcm ⁡ ( i , p i ) \sum_{i=1}^n\operatorname{lcm}(i, p_i) i=1nlcm(i,pi) 最大。

解答 本题初看没什么思路,不过连蒙带猜构造还是容易的。

本题构造方法如下:

  1. 如果 n n n 为偶数,则构造 2 , 1 , 4 , 3 , 6 , 4 , ⋯   , n , n − 1 2, 1, 4, 3, 6, 4, \cdots, n, n-1 2,1,4,3,6,4,,n,n1
  2. 如果 n n n 为奇数,则构造 1 , 3 , 2 , 5 , 4 , 7 , 6 , ⋯   , n , n − 1 1, 3, 2, 5, 4, 7, 6, \cdots, n, n-1 1,3,2,5,4,7,6,,n,n1

感觉上这样就很大。

下面用两种方法证明:

方法1 我的证明方法。

首先,当 n = 1 , 2 n=1, 2 n=1,2 时,容易证明这样的构造是不劣的。

其次,如果当 n = k − 2 ( k ≥ 3 ) n=k-2(k\ge 3) n=k2(k3) 时,这样的构造是不劣的,我们下证明 n = k n=k n=k 时这样的构造是不劣的(即在原构造的基础上最后添加的是 k , k − 1 k, k-1 k,k1

无非有以下几种情况:

  1. p k − 1 = k , p k = k − 1 p_{k-1}=k, p_k=k-1 pk1=k,pk=k1,这样的值是 l a s t + 2 k ( k − 1 ) last+2k(k-1) last+2k(k1),其中 l a s t last last n = k − 2 n=k-2 n=k2 时的答案。
  2. p k − 1 = k − 1 , p k = k p_{k-1}=k-1, p_k=k pk1=k1,pk=k,这样的值是 l a s t + k + ( k − 1 ) = l a s t + 2 k − 1 last+k+(k-1)=last+2k-1 last+k+(k1)=last+2k1。容易证明 1 比 2 优。
  3. p k − 1 = t , p t = k − 1 , p k = k , ( 1 ≤ t ≤ k − 2 ) p_{k-1}=t, p_t=k-1, p_k=k,(1\le t\le k-2) pk1=t,pt=k1,pk=k,(1tk2),这样的值是 l a s t − 2 t ( t ± 1 ) + 2 ( k − 1 ) ( t ± 1 ) + 2 lcm ⁡ ( t , k ) ≤ l a s t + 2 ( k − 1 − t ) ( t + 1 ) + 2 t k = l a s t − 2 t 2 + ( 4 k − 4 ) t + 2 ( k − 1 ) last-2t(t\pm 1)+2(k-1)(t\pm 1)+2\operatorname{lcm}(t, k)\le last+2(k-1-t)(t+1)+2tk=last-2t^2+(4k-4)t+2(k-1) last2t(t±1)+2(k1)(t±1)+2lcm(t,k)last+2(k1t)(t+1)+2tk=last2t2+(4k4)t+2(k1),当 t = k − 1 t=k-1 t=k1(实际上取不到)时, 2 ( k − 1 − t ) ( t + 1 ) + 2 t k 2(k-1-t)(t+1)+2tk 2(k1t)(t+1)+2tk 有最大值 2 k ( k − 1 ) 2k(k-1) 2k(k1)。所以 1 比 3 优。
  4. 其他情况可类似于 3 证明。

其实 3 4 可以这样理解;我多出了两个数 k − 1 , k k-1, k k1,k,如果和之前的两个数 i , j i,j i,j 进行两两组合 成 ( a , b ) , ( c , d ) (a,b), (c,d) (a,b),(c,d),贡献为 a b + c d ab+cd ab+cd(这里假设 a ⊥ b , c ⊥ d a\perp b, c\perp d ab,cd 为不劣情况),根据排序不等式, k − 1 k-1 k1 k k k 组合会更优;同时由于 ( k − 1 ) ⊥ k (k-1)\perp k (k1)k,所以这种情况的最优性得到了确保。这样,再结合 1, 2,就可以得到构造的最优性。

方法2 是来自原题解的神乎其技!没看懂qwq。

提交记录

C

题意 给一个长度为 n n n 的数列 a i ( 1 ≤ a i ≤ n ) a_i(1\le a_i\le n) ai(1ain)。定义一个操作为:自己选一个 x x x,使得所有 a i = x a_i=x ai=x a i a_i ai 变为 0。问最少需要几次操作使得数列变成单调不降。

解答 想象一下最后的情形,一定是一个:存在一个 t ∈ [ 0 , n ] t\in[0, n] t[0,n],当 1 ≤ i ≤ t ,   a i = 0 1\le i\le t,\ a_i=0 1it, ai=0,当 i > t i>t i>t a i ≥ 1 a_i\ge 1 ai1 且不降。

所以我们从 n n n 往前扫描,确定这样一个 t t t

如果找到一个 k < n k<n k<n,满足 a k > a k + 1 a_k>a_{k+1} ak>ak+1,那么就把 t t t 定为 k k k,这样正确吗?

出现问题:因为操作要对所有 a i = x a_i=x ai=x 操作,所以对 a 1 … k a_{1\dots k} a1k 操作时,有可能也会将 a k + 1 ⋯ n a_{k+1\cdots n} ak+1n 中的一些值变成 0。

所以我们需要补充一个条件:扫到一个 a i a_i ai 时,如果存在 j < i j<i j<i a j = a i a_j=a_i aj=ai,那么, ∀ k ∈ [ j , i ] \forall k\in[j,i] k[j,i] 都应该有 a k = a i a_k=a_i ak=ai,否则就要从 i i i 开始往前赋值为 0 了。

实现过程中,只需记录每种 a i a_i ai 出现次数和最初位置,即可 O ( n ) O(n) O(n) 判断。

提交记录

D

题意 给一个长度为 n n n 的数列 a n , ( 1 ≤ a i ≤ 1 0 9 ) a_n,(1\le a_i\le 10^9) an,(1ai109),和一个正整数 k ( 1 ≤ k ≤ n ) k(1\le k\le n) k(1kn),可以进行至多 k k k 次操作,每次操作将数列中的某一个数变为自己选的一个数 x ( 1 ≤ x ≤ 1 0 9 ) x(1\le x\le 10^9) x(1x109)。进行完操作后,建立 n n n 个点的完全图,且节点 x x x y y y 之间连边为 e ( x , y ) = min ⁡ x ≤ k ≤ y a k e(x,y)=\min_{x\le k\le y} a_k e(x,y)=minxkyak,设 d ( x , y ) d(x,y) d(x,y) x , y x,y x,y 之间的最短路径,求对任意 u , v u,v u,v d ( u , v ) d(u,v) d(u,v) 的最大值(也就是直径 d i a m e t e r diameter diameter)。

解答 考虑 d ( x , y ) , x < y d(x,y),x<y d(x,y),x<y,容易发现

d ( x , y ) = min ⁡ ( min ⁡ x ≤ i ≤ y a i , 2 ⋅ min ⁡ 1 ≤ i ≤ n a i ) d(x,y)=\min(\min_{x\le i\le y} a_i,2\cdot\min_{1\le i\le n} a_i) d(x,y)=min(xiyminai,21inminai)

前者是直接走过去,也就是 e ( u , v ) e(u,v) e(u,v);后者是通过两条最小的边到达。

事实上,图中最小的边就是途径 a t a_t at a t a_t at 为最小值)的边。所以容易理解上面的式子的正确性。

于是直径

d i a m e t e r = max ⁡ u < v d ( u , v ) = max ⁡ u < v min ⁡ ( min ⁡ u ≤ i ≤ v a i , 2 ⋅ min ⁡ 1 ≤ i ≤ n a i ) = min ⁡ ( max ⁡ u < v min ⁡ u ≤ i ≤ v a i , 2 ⋅ min ⁡ 1 ≤ i ≤ n a i ) = min ⁡ ( max ⁡ 1 ≤ k < n min ⁡ ( a k , a k + 1 ) , 2 ⋅ min ⁡ 1 ≤ i ≤ n a i ) \begin{aligned} &diameter\\ =& \max_{u<v}d(u,v)\\ =& \max_{u<v}\min(\min_{u\le i\le v}a_i,2\cdot \min_{1\le i\le n}a_i) \\ =& \min(\max_{u<v}\min_{u\le i\le v}a_i, 2\cdot \min_{1\le i\le n}a_i)\\ =&\min(\max_{1\le k< n}\min(a_k,a_{k+1}), 2\cdot \min_{1\le i\le n}a_i) \end{aligned} ====diameteru<vmaxd(u,v)u<vmaxmin(uivminai,21inminai)min(u<vmaxuivminai,21inminai)min(1k<nmaxmin(ak,ak+1),21inminai)

(最后一步是因为, u , v u,v u,v 相距远的时候一定没有比 u , v u,v u,v 紧挨着的情况优)

我们要求的是 k k k 次操作后, d i a m e t e r diameter diameter 的最大值

于是有以下两种方法:

解法1 二分法

二分一个 d d d,看看是否满足 a n s ≥ d ans \ge d ansd。那么要求 max ⁡ 1 ≤ k < n min ⁡ ( a k , a k + 1 ) ≥ d \max_{1\le k<n}\min(a_k, a_{k+1})\ge d max1k<nmin(ak,ak+1)d min ⁡ 1 ≤ i ≤ n a i ≥ d / 2 \min_{1\le i\le n}a_i\ge d/2 min1inaid/2。所以,我们先对所有 < d / 2 <d/2 <d/2 a i a_i ai 进行操作(变成 1 0 9 10^9 109 肯定不劣)。如果操作不够,那当然 false。否则,再检验前一个式子是否成立。如果剩余的操作数 k ≥ 2 k\ge 2 k2,可以把相邻的两个数变成 1 0 9 10^9 109,肯定可以满足题意的;如果 k = 1 k=1 k=1,把最大数旁边的一个数变成 1 0 9 10^9 109,那么就判断最大数是否 ≥ d \ge d d;如果 k = 0 k=0 k=0,直接按式子判断即可。

二分的区间为 [ 1 , 1 0 9 ] [1, 10^9] [1,109] 即可。

提交记录

解法2 贪心法

k − 1 k-1 k1 次操作用作将数列的前 k − 1 k-1 k1 小值变为 1 0 9 10^9 109,最后一次操作用来枚举 1 1 1 n n n,这个位置再变成 1 0 9 10^9 109。取所有枚举的最大值。(事实证明枚举这一步是可以避免的,见下文)

下面简单证明一下。当 k = 1 k=1 k=1 是显然的;当 k ≥ 2 k\ge 2 k2 时:

我们要求所有的操作最大化

min ⁡ ( max ⁡ 1 ≤ k < n min ⁡ ( a k , a k + 1 ) , 2 ⋅ min ⁡ 1 ≤ i ≤ n a i ) \min(\max_{1\le k< n}\min(a_k,a_{k+1}), 2\cdot \min_{1\le i\le n}a_i) min(1k<nmaxmin(ak,ak+1),21inminai)

那么我们的贪心不能杜绝达到最优的可能性。如果最后限制住的是 2 ⋅ min ⁡ 1 ≤ i ≤ n a i 2\cdot \min_{1\le i\le n}a_i 2min1inai 的部分,那么我最后一次选取第 k k k 小值,则实质上选取了前 k k k 小值,尽全力提升了 2 ⋅ min ⁡ 1 ≤ i ≤ n a i 2\cdot \min_{1\le i\le n}a_i 2min1inai;如果最后限制住的是 max ⁡ 1 ≤ k < n min ⁡ ( a k , a k + 1 ) \max_{1\le k< n}\min(a_k,a_{k+1}) max1k<nmin(ak,ak+1),那么我们可以让两个 1 0 9 10^9 109 相邻,解除这个限制。

从上面的算法我们发现,我们其实不需要从 1 1 1 n n n 枚举(事实上就算枚举,也可以在不劣的复杂度下完成),只需要比较以下两处选取最大答案:

  1. 选取第 k k k 小值(注意可能有多个)处,这样可以使得第二项的值达到第 k + 1 k+1 k+1 项的值,在此基础上最大化第二项。
  2. 选取 a i a_i ai 最大项的相邻的元素,也就是最大化第一项,而第二项为第 k k k 项的值。

时间复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn),瓶颈在排序。

提交记录

E1 & E2

题意 给出 l , r l,r l,r,求

∑ l ≤ i < j < k ≤ r [ lcm ⁡ ( i , j , k ) ≥ i + j + k ] \sum_{l\le i<j<k\le r}[\operatorname{lcm}(i,j,k)\ge i+j+k] li<j<kr[lcm(i,j,k)i+j+k]

解答 首先不考虑限制,这样的 ( i , j , k ) (i,j,k) (i,j,k) 三元组有 ( r − l + 1 3 ) \binom{r-l+1}{3} (3rl+1) 个,那么原式即

( r − l + 1 3 ) − ∑ l ≤ i < j < k ≤ r [ lcm ⁡ ( i , j , k ) < i + j + k ] \binom{r-l+1}{3}-\sum_{l\le i <j < k\le r}[\operatorname{lcm}(i,j,k)<i+j+k] (3rl+1)li<j<kr[lcm(i,j,k)<i+j+k]

考虑后半部分(记为性质 Q)如何计数。

由于 k ∣ lcm ⁡ ( i , j , k ) k\mid \operatorname{lcm}(i,j,k) klcm(i,j,k),而 i + j + k < 3 k i+j+k<3k i+j+k<3k,那么 lcm ⁡ ( i , j , k ) = k  或  2 k \operatorname{lcm}(i,j,k)=k\ \textnormal{或}\ 2k lcm(i,j,k)=k  2k。代入 lcm ⁡ ( i , j , k ) < i + j + k \operatorname{lcm}(i,j,k)<i+j+k lcm(i,j,k)<i+j+k,得到等价条件为:

lcm ⁡ ( i , j , k ) = k \operatorname{lcm}(i,j,k)=k lcm(i,j,k)=k 或 ( lcm ⁡ ( i , j , k ) = 2 k \operatorname{lcm}(i,j,k)=2k lcm(i,j,k)=2k i + j > k i+j>k i+j>k

两种情况下 i , j i,j i,j 都必须要是 2 k 2k 2k 的因数。我们先枚举 k k k 再枚举 i ∣ 2 k i\mid 2k i2k,用 f ( i , k ) f(i,k) f(i,k) 表示满足 i < j < k i<j<k i<j<k 且满足性质 Q 的三元组 ( i , j , k ) (i,j,k) (i,j,k) 的个数(即 j j j 的个数)。

这样我们就得到了若干个 f ( i , k ) f(i,k) f(i,k)。之后将询问离线,所有询问和贡献按 r r r 排序,维护 l l l 端点的答案,用树状数组维护即可。

时间复杂度为 O ( ∑ i = 1 n σ 0 ( 2 i ) ⋅ ( σ 0 ( 2 i ) + log ⁡ n ) + T log ⁡ n ) O(\sum_{i=1}^n\sigma_0(2i)\cdot (\sigma_0(2i)+\log n)+T\log n) O(i=1nσ0(2i)(σ0(2i)+logn)+Tlogn)

类比于 O ( ∑ i = 1 n σ 0 ( i ) ) = O ( ∑ i = 1 n ⌊ n / i ⌋ ) = O ( n log ⁡ n ) O(\sum_{i=1}^n\sigma_0(i))=O(\sum_{i=1}^n\lfloor n / i\rfloor)=O(n\log n) O(i=1nσ0(i))=O(i=1nn/i⌋)=O(nlogn),上面那玩意大概是 O ( n log ⁡ 2 n + T log ⁡ n ) O(n\log^2 n+T\log n) O(nlog2n+Tlogn)

提交记录

F

暂时不会,待填。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日居月诸Rijuyuezhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值