CF660F题解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF660F题解相关的知识,希望对你有一定的参考价值。

\\(val_{i,j}\\)为区间\\([l,r]\\)的答案

根据题意,我们可以维护\\(a_i\\)\\(i* a_i\\)的前缀和\\(sum1,sum2\\)

\\(val_{l,r}=sum2[r]-sum2[l-1]-(l-1)*(sum1[r]-sum1[l-1])\\)

我们枚举\\(r\\)

对于所有\\(val_{l\',r}\\le val_{l,r}\\),有

\\((l\'-1)*sum1_{l\'-1}-sum2_{l\'-1}-(l\'-1)*sum1_r\\le (l-1)*sum1_{l-1}-sum2_{l-1}-(l-1)*sum1_r\\)

我们发现这个式子可以斜率优化

斜率优化一般把我们要的最大值/最小值也就是这里的\\(val_{l,r}\\)放在\\(b\\)里面,那么\\((l-1)*sum1_{l-1}-sum2_{l-1}-(l-1)*sum1_r\\)就可以表示成\\(y-kx\\)

把跟\\(r\\)有关的放在\\(k\\)里面,\\(k=sum1_r\\)

于是\\(b=val_{l,r}-sum_r,x=l-1,y=(l-1)*sum1_{l-1}\\)

因为是最大值,我们维护一个上凸壳每次二分找到第一个斜率小于\\(sun1_r\\)的位置,然后更新答案即可

以上是关于CF660F题解的主要内容,如果未能解决你的问题,请参考以下文章

CF398B题解

CF1051G 题解

CF1149C 题解

题解Lomsat gelral [CF600E]

题解-比赛CF1332

题解CF519E