专栏文章

P10675 【MX-S1-T4】先见之明

P10675题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio0xffx
此快照首次捕获于
2025/12/02 11:34
3 个月前
此快照最后确认于
2025/12/02 11:34
3 个月前
查看原文
对于一次询问,考虑有哪些可能的解。首先是一些特殊的答案:ans=k,2p1+1,2prep1+1ans=k,2^{p_1 + 1},2^{pre_{p_1 + 1}},其中 preipre_i 为 最小的 aja_j 使得 ajia_j \ge i,这些都是可以快速判断的,先不考虑。
再就是答案肯定是 kk 的一段前缀 +2j+2^j,其中 jkj\notin k。设答案取了 2p12pi2^{p_1} \sim 2^{p_i}2j(pi>j>pi+1)2^j (p_i > j > p_{i+1}),考虑这个 jj 的取值可能是哪些。
  • 如果这个 2j2^j 是用一些 2pi+1\le 2^{p_{i+1}}aa 凑成的,那么肯定经过了这些 aa 先加到 2pi+1+12^{p_{i+1}+1} 再不断进位到 2j2^j,既然中间都存在到一个更小值的过程,那把 jj 换成 pi+1+1p_{i+1} + 1 肯定更优,所以一种可能的取值是 2pi+1+12^{p_{i+1} + 1}
  • 如果 2j2^j 用了 >2pi+1> 2^{p_{i+1}}aa 凑,那么这些 aa 肯定不会 2pi+1\le 2^{p_{i+1}},理由同上。那么肯定只用一个 aa 最优,且这个 aa 肯定是出现在 [pi+1+1,pi1][p_{i+1} + 1,p_{i} - 1] 中最小的那个,证明和上面类似:如果取的不是最小那个,那么这个最小的用途肯定是去凑 2pi\ge 2^{p_i} 的数了,中间肯定有个过程是变成了 2j2^j,那把这个 2j2^j 用一开始就存在的这个 2j2^j 替换掉肯定更优。
所以只会存在最多 2m2m 种取值,设取值为 jj 的答案为 ansjans_j,容易发现 ansans 是单调递增的。
考虑判定一个数 $x 能否被凑出来:
  • 如果 x=2tx=2^t,那么只考虑 t\le taia_i,条件就是 2aix\sum 2^{a_i} \ge x
  • 如果 x=i=1k2bi(bi<bi+1)x=\sum\limits_{i=1}^k 2^{b_i}(b_i < b_{i+1}),那么条件就是 i,ji2bjajbi2aj\forall i,\sum\limits_{j\le i} 2^{b_j} \le \sum\limits_{a_j \le b_i} 2^{a_j},容易归纳证明。
把这个条件放到 ansans 上去看,对于一个 2pi2^{p_i},右边的 ajpi2aj\sum\limits_{a_j \le p_i} 2^{a_j} 已经知道了,又因为 ansans 是单调的,所以如果处理出一个 posipos_i 表示最大的 ansjans_j 使得 ansjans_jii 后面位置的和 ajpi2aj\le \sum\limits_{a_j \le p_i} 2^{a_j},那么判断 ansans 只需要对 posipos_{i} 维护前缀 min\min 再额外判断一下 jj 即可。
考虑咋处理这个 pospos,先预处理一个 fi,gif_i,g_i 表示把 i\le iaa 加起来(不进位到 i+1i+1)得到的第 ii 位的值和下一个 11 的位置。那么如果 fpi=0f_{p_i} = 0posipos_i 就没救了,否则如果 >1>1 那么对于所有后缀都合法,令 posi=pipos_i=p_i=1=1 可以讨论 gig_i 的值通过 posi+1pos_{i+1} 递推得到。
复杂度就是预处理 Θ(n+V)\Theta(n+V),每次询问 Θ(m)\Theta(m),总复杂度就是 Θ(n+V+m)\Theta(n+V+\sum m)

评论

0 条评论,欢迎与作者交流。

正在加载评论...