首页 > 其他分享 >CF1344D 题解

CF1344D 题解

时间:2022-12-20 16:11:53浏览次数:58  
标签:le log CF1344D 题解 sum 复杂度

题意

传送门

给定一个长度为 \(n\) 的数组 \(a_i\),构造自然数数组 \(b_i\) 满足:

  • \(\forall i,b_i \in [0,a_i]\)
  • \(\sum_{i=1}^n b_i=k\)

并最大化 \(\sum_{i=1}^n b_i(a_i-b_i^2)\)。

\(1 \le n \le 10^5,1 \le a_i \le 10^9\)。

题解

一道挺新颖的数学题,来记一下。

设 \(f(x,i)\) 表示 \(x(a_i-x^2)\)。这是一个三次函数,比较难看。

使用一个常见的套路,设 \(g(x,i)=f(x,i)-f(x-1,i)\)。这样就变成了二次函数。

再对其求导,得到 \(g'(x,i)=-6x+3\)。因为 \(x \in N^*\),故 \(g\) 是单调递减的。

结合 \(g\) 的实际意义,不难得出一个 \(O(k \log n)\) 的算法:动态加 \(b\),用大根堆维护所有 \(g(b_i+1,i)\),每次取堆顶 \(i\),将 \(b_i\) 自增。

更进一步,利用 \(g\) 的单调性,二分一个 \(t\),对所有 \(i\) 求出满足 \(g(x,i) \ge t\) 的最大 \(x\)。判断 \(\sum x\) 与 \(k\) 的大小关系即可。复杂度 \(O(n \log^2 V)\)。

其实也可以不用二分,因为 \(g(x,i)\) 是只和 \(x\) 有关的二次函数,直接算就行了。复杂度 \(O(n \log V)\)。

标签:le,log,CF1344D,题解,sum,复杂度
From: https://www.cnblogs.com/FishJokes/p/16994402.html

相关文章

  • 关于XML文件运行一段时间后,发现程序加载XML文件的时候报错问题解决方法
    一、问题描述程序所使用的XML文件运行一段时间后,发现程序加载XML文件的时候报错,要么XML内容被清空,要么就是内容少了一些,节点不完整,不是有效的XML文件。二、问题分析针对......
  • P1314 聪明的质监员(题解)
    题目小T是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有\(n\)个矿石,从\(1\)到\(n\)逐一编号,每个矿石都有自己的重量\(w_i\)以及价值\(v_i\)。检验......
  • NOIP2022题解
    \(\mathbf{NOIP2022}\)\(\mathbf{plant}\)\(\mathbf{Describe}\)题面\(\mathbf{Solution}\)我们记\(f(x,y)\)表示从\((x,y)\)向右连续的\(0\)段的长度,\(up_......
  • NOIP2022 游记 & 简要题解
    游.寄\(\text{Day0}\)由于疫情的原因,原本预定的团建活动鸽了,于是就在机房里放送起来,打了一天的三国杀,身份、国战都打了。中午教练请吃饭,吃到了来一中之后最好的一餐。......
  • 剑指offer 题解目录(C++)
    序号题目知识点难度1​​二维数组中的查找​数组查找较难2​​替换空格​字符串较难3​​从尾到头打印链表​链表较难4​​重建二叉树​树中等5​​用两个栈实现队列......
  • mysql及redis环境部署时遇到的问题解决
    redis开启远程访问redis默认只允许本地访问,要使redis可以远程访问可以修改redis.conf打开redis.conf文件在NETWORK部分有说明解决办法:注释掉bind127.0.0.1可以使所有的ip访......
  • Element UI Table 固定列遮挡横向滚动条问题解决方案记录
    .el-table{::v-deep.el-table__fixed{height:auto!important;bottom:16px;//横向滚动条高度}::v-deep.el-table__fixed::before{display......
  • 问题解决系列:NameError: name 'platform_system' is not defined
    问题场景使用 ​​pip​​​安装依赖的时候,更新之后,更新的依赖不能用。比如我将机器的​​ansible​​​版本指定安装​​2.7.11​​​版本,安装成功之后,使用命令​​ansible......
  • JAG Spring Contest 2012 G PLAY in BASIC 题解
    提交链接其实就是个大模拟。首先对输入的串进行处理,把所有的命令分开,并把连续的停顿合并。为了方便,定义一个时间单位为全音符的\(\frac1{128}\),这样所有命令的持续时间都......
  • JAG Spring Contest 2012 G PLAY in BASIC 题解
    提交链接其实就是个大模拟。首先对输入的串进行处理,把所有的命令分开,并把连续的停顿合并。为了方便,定义一个时间单位为全音符的\(\frac1{128}\),这样所有命令的持续时间都......