第五十二次 & 不知道第多少次 五

A

答案很小,可以直接枚举答案。

B

设 $f(i)$ 表示 $i$ 这条边被多少最小环包含,则答案为 $\dfrac{\sum f(i)}d$,其中 $d$ 为最小环长度。

此时只需要求 $f(i)$ 和 $d$,对每条边跑一次最短路计数容易得出。

C

Sol 1

依次加入每个数,维护 $f_i$ 表示长度为 $i$ 的子序列的最小结尾,考虑转移,

发现加入 $x$ 时 $f_{i-1}\times b_{i-1}\le f_i\times b_i<x$ 的 $f_i<\dfrac x{b_i}\le x$ 更新不了,$x\le f_{i-1}\times b_{i-1}\le f_i\times b_i$ 的 $f_i$ 转移不到,

只有 $f_{i-1}\times b_{i-1}<x\le f_i\times b_i$ 的 $f_i$ 可能被更新,而容易发现 $f_i\times b_i$ 是单调的,二分即可。

Sol 2

依次加入每个数,维护 $f_i$ 表示结尾为 $i$ 的子序列的最大长度,考虑转移,

加入 $x$ 时,有 $f_x=\max\{f_i|x>i\times b_{f_i}\}+1$。

注意到此处只对每个 $i|x>i\times b_{f_i}$ 考虑了 $x$ 接上以 $i$ 结尾的最长子序列的情况,而这是对的。

证明:考虑存在某个 $i|x\le i\times b_{f_i}$ 且 $x$ 可以接上以 $i$ 结尾的,长度 $<f_i$ 的某个非最长子序列时,

可以接出一个以 $x$ 结尾的,长度 $\le f_i$ 的子序列,而 $x>i$,所以这个子序列严格劣于以 $i$ 结尾的,长度为 $f_i$ 的最长子序列,所以可以不管。

动态开点线段树维护即可。

D

类似超级钢琴地,定义 $(v,x,y,l_1,r_1,l_2,r_2)$ 为一组 $i\in[l_1,r_1],j\in[l_2,r_2]$,且其中最优者为分数为 $v$ 的 $(x,y)$ 的候选答案。

考虑类似地依次拿出前 $k$ 大,只需要考虑拿出一组候选答案后其怎么分裂。

看起来对于任意 $l_1,r_1,l_2,r_2$ 不太容易快速确定 $v,x,y$,但 $[l_1,r_1]=[l_2,r_2]$ 或 $[l_1,r_1]\cap[l_2,r_2]=\varnothing$ 时容易确定 $v,x,y$,

所以尝试保证当前每一组候选答案都是上面的形式。

对于 $[l_1,r_1]=[l_2,r_2]$,将其分裂为 $([l_1,x-1],[l_1,x-1])|x>l_1,([l_1,x-1],[x,r])|x>l_1,([x,x],[x,x])|x\ne y,([x,x],[x+1,y-1])|x<y-1,([x,x],[y+1,r])|y<r,([x+1,r],[x+1,r])|x<r$。

对于 $[l_1,r_1]\cap[l_2,r_2]=\varnothing$,将其分裂为 $([l_1,x-1],[l_2,r_2])|x>l_1,([x+1,r_1],[l_2,r_2])|x<r_1,([l_1,r_1],[l_2,y-1])|y>l_2,([l_1,r_1],[y+1,r_2])|y<r_2$。

堆维护候选答案即可。

posted @ 2023-10-11 20:55  5k_sync_closer  阅读(3)  评论(0编辑  收藏  举报  来源