首页 > 其他分享 >CF1826D

CF1826D

时间:2023-08-28 19:00:38浏览次数:30  
标签:pre suf 枚举 答案 我们 CF1826D

原题

翻译

这题乍一看不太好做,当时还想了单调栈或改变枚举顺序之类的做法,但都不可做

但仔细一想,我们发现答案的\(b_l\)和\(b_r\)一定会被选到,否则我们可以把没用的部分去掉,这样\(b_1+b_2+b_3\)的值不会变,\(r-l\)还会变小,这一步是缩小答案的范围

然后我们发现这个条件还是很严格,因为我们没法保证\(b_l\)和\(b_r\)和\((l,r)\)内的一个数恰好就是这个区间\([l,r]\)的前三大值

但我们发现我们没必要总是取到这个条件,我们考虑把一定不对的答案也加入可能的答案的集合中。我们枚举一个\(i\),表示\(b_i\)一定选到,则可以确定\(l\)可能的范围为\([1,i)\),同样的,\(r \in (i,n]\),这样我们可以求出前缀最大的\(b_l+l\)和后缀最大的\(b_r-r\),分别记作\(pre_i\)和\(suf_i\),然后可以直接用\(b_i+pre_{i-1}+suf_{i+1}\)来更新答案

为什么这样一定是对的呢,因为发现如果\(b_i\)并不是\([l,r]\)的最大值,不妨设\([l,r]\)的最大值为\(b_j\),则当\(i\)枚举到\(j\)的时候显然会再把正确的答案算一遍,而这个答案显然是不劣于上一个答案的,因此即使我们加入了错误的限制也无妨

最终复杂度\(O(n)\)

标签:pre,suf,枚举,答案,我们,CF1826D
From: https://www.cnblogs.com/fox-konata/p/17663175.html

相关文章

  • cf1826D
    一个区间的权值为最大的三个数的和-区间长度,求最大的权值。首先我们注意到,两个端点肯定是max,考虑反证法,假设当前选的是l,r区间,若两端不是max,则可以通过增大l,减小r来增加答案。(然而好像并没有什么用?)我们可以设\(f[i][1/2/3]\),表示到了第i个点,我们当前选了几个的最大贡献。那么根......
  • CF1826D Running Miles
    题意给你一个长度为\(n\)的序列\(b\),求下面这个式子的值:\[\max_{1\lel\lei\ltj\ltk\ler\len}(b_i+b_j+b_k-(r-l))\]\(n\le10^5\)。思路官方题解给出的做法使用了单调栈,这里给出一种不用栈的做法。首先,把题目的柿子优化下。显然,为了尽量地减小\(r-......