首页 > 其他分享 >AGC049F 更优秀的做法

AGC049F 更优秀的做法

时间:2023-07-31 10:25:32浏览次数:48  
标签:le log 优秀 两边 mid AGC049F 做法 操作 sum

题面

给定长度为 \(n\) 的整数序列 \(A\),\(B\) 和 \(C\)。snuke 是开心的,当且仅当下面的条件满足:

  • 对于任意整数 \(x\),均有 \(\sum_{1 \le i \le n} |A_i - x| \le \sum_{1 \le i \le n} |B_i - x|\)。

他决定改变 \(A\) 中的一些元素来变得开心。把 \(A_i\) 改成 \(t\) 需要花费 \(C_i \times (A_i-t)^2\) 的代价。其中,\(t\) 必须得是整数。

为了使 snuke 变得开心,至少要花费多少代价呢?

数据范围:\(1 \le n \le 2 \times 10^5\),\(0 \le A_i,B_i,C_i \le \color{red}{10^9}\)。

题解

首先考虑维护 \(g(x) = \sum_i |a_i-x| - \sum_i |b_i-x|\)。最后的要求就是 \(g(x) \le 0\)。

可以把 \(A_i,B_i\) 看成数轴上的点。对于一个 \(A_p = x\),将 \(A_p\) 改成 \(y(y \ge x)\) 的过程可以看成是不停地把 \(A_p\) 往右移。每次对 \(A_p\) 的移动 \(i \to i+1(i \ge A_p)\),相当于是给 \(x \le i\) 的 \(g(x)\) 增加 \(1\),给 \(x > i\) 的 \(g(x)\) 减少 \(1\)。其代价为 \(C_p(2i-2A_p+1)\)。

注意到 \(x \to x+1\) 和 \(x+1 \to x+2\) 中,后者增加的代价更大,而前者的操作优于后者。因此虽然我们要求执行完 \(x \to x+1\) 后才能执行 \(x+1 \to x+2\),但是事实上把他们独立开来仍然是正确的。减小的操作是对称的。

又注意到如果有操作 \(u \to u-1\),和操作 \(v \to v+1\),那么必然有 \(u-1 \ge v+1\):如果不满足条件,则把两个操作都删了肯定更优秀。

这就意味着存在一个分界线 \(mid\),使得只有 \(u > mid\) 的 \(u \to u-1\) 操作和 \(v<mid\) 的 \(v \to v+1\) 操作。在这里,如果存在多个 \(mid\),选择 \(g(mid)\) 最大的那个。

然后可以发现,操作后必然满足 \(g(mid)=0\)。这是因为,我们找到 \(mid\) 左边第一个向右的操作,和 \(mid\) 右边的第一个操作,同时删去他们,答案一定变小(由于奇偶性,\(g(mid) \neq 1\))。

观察到所有操作都让 \(g(mid)\) 减小了,这说明 \(mid\) 是被操作最多的元素。而由于操作后 \(g(mid) = 0\),说明 \(g(mid)\) 是操作后最大的元素。减的最多,结果最大,说明 \(g(mid)\) 初始时就是最大的!因此我们就能够找到 \(mid\) 了。

找到后,考虑把问题分成左右两部分,左边增加,右边减小。而两边中唯一会影响另一边的因素是两边的操作次数。

带入 \(g(-\infty)\) 和 \(g(\infty)\) 可知 \(\sum a_i = \sum b_i\),因此我们可以知道两边操作个数的差。我们又知道两边操作次数的和:总和为 \(g(mid)\)。这样就可以解出来两边的操作次数。因此两部分就是完全独立的了。更具体地,两边操作后均满足 \(\sum a_i = \sum b_i\)。

所以现在我们的问题就转化成了一个只有增加的问题了。

二分一个斜率 \(M\),然后执行所有代价 \(\le M\) 的操作。每个点移动到了一个新点,我们从把每个点都看成从新点出发移动。

注意到改成从新点移动后,之前的大部分结论都还是是成立的!也就是说,这里同样存在一个 \(mid\),使得之后做的操作,\(mid\) 左边的只向右,\(mid\) 右的只向左。\(mid\) 仍然满足 \(g(mid)\) 是最大的。我们仍然可以按照 \(mid\) 把数轴切成两半,两半互不相关!

注意到切完之后,两边操作的代价范围都减半了,因此不停地做一些类似整体二分的东西,递归下去即可!

时间复杂度 \(\Theta(n \log n (\log A + \log B + \log C))\)。

aclink

标签:le,log,优秀,两边,mid,AGC049F,做法,操作,sum
From: https://www.cnblogs.com/zkyJuruo/p/17592721.html

相关文章

  • 【每日随笔】关于 “ 择偶 “ ③ ( 男性视角 - 错过优秀的人 | 跟你在一起是否吃亏 |
    文章目录一、男性视角-错过优秀的人1、跟你在一起是否吃亏2、权衡算计的过程3、高额彩礼是怎么来的4、男人要有自知之明5、不要做舔狗6、雌竟与雄竟应该做的事7、奶头乐-爱情与消费一、男性视角-错过优秀的人1、跟你在一起是否吃亏女人是否愿意和你在一起,做出这个......
  • 552页《Android开发相关源码精编解析》开源分享,优秀Android工程师必备
    2022年已过大半,回首上半年,有犹豫、有抉择、有放弃、有收获。在拼尽全力后,我度过了职业生涯的第一个七年之痒,从之前的外包小厂成功跳槽到一家一线互联网大厂,年薪从30w涨到了50w!!!在这里我想跟各位有多年开发经验的同行说一句:“无论你处在人生的那个阶段,无论你身处于那个职位,都不要摆烂......
  • CF547D Mike and Fish 小丑做法--zhengjun
    写到一半发现标签有二分图就不对劲了,题解区里都是欧拉回路。然而我是随机化+模拟网络流!自豪首先可以先建模,观察同一种颜色,发现每一行或每一列的限制即为\(\lfloor\frac{t}{2}\rfloor\lex\le\lceil\frac{t}{2}\rceil\)。然后套路地把横坐标和纵坐标分开来建个二分图,建立源点......
  • 【大联盟】20230703 T2 开心的序列(sequence) 题解 AT_agc049_f 【[AGC049F] Happy Sequ
    zak/bx恐怖zak将这题加强,出到模拟赛。直接把\(A_i,B_i\le10^5,C_i\le5\)变成了\(A_i,B_i,C_i\le10^9\)。非常恐怖。题目描述点击膜拜zhoukangyang。题解重新再理解一遍。我们维护\(p(x)=\sum_i|a_i-x|+|b_i-x|\),那么就相当于要求\(\forallx,p(x)\le0\),也就......
  • ARC133F FWT 做法
    看见网上题解都是“二维生成函数”,就来传一下这个做法(问题可以转化为:\(n\)枚硬币,每次随机翻一枚,求最后正面朝上硬币个数的期望。把这个过程看作XOR卷积,并且需要卷积的两个数组有特性:在popcount相同的位置值相同。这样只要对这种特殊的数组能做fwt就做完了。于是现在要......
  • 8款优秀的HTML5开发工具
    HTML5发展越来越受到重视,随着各大浏览器对HTML5技术支持的不断完善以及HTML5技术的不断成熟,未来HTML5必将改变我们创建Web应用程序的方式。今天这篇文章向大家推荐8款优秀的HTML5开发工具,帮助你更高效的编写HTML5应用。InitializrInitializr是制作HTML5网......
  • 优秀的 RocketMQ 可视化管理工具 GUI 客户端
    优秀的RocketMQ可视化管理工具GUI客户端官网地址:http://www.redisant.cn/rocketmq快速查看所有RocketMQ集群,包括Brokers、Topics和Consumers查看消费者订阅了哪些主题,以及消息队列被分配给了哪些消费者;当出现消息积压时,RocketMQAssistant帮您快速定位问题创建普通消......
  • 一份优秀的简历,至少要做到……
    本文首发自公粽hao「林行学长」,欢迎来撩,免费领取20个求职工具资源包。了解校招、分享校招知识的学长来了!马上就要秋招了(或者说有的同学已经开始秋招了),不知道大家简历准备得怎么样了?简历的重要性不言而喻,无论是校招、海投还是找人帮助内推,一份像样的简历都是求职必备的。学长今天就......
  • 《Effective C++ 改善程序与设计的55个具体做法》读书笔记
    1.让自己习惯C++条款01视C++为一个语言联邦CObject-OrientedC++TemplateC++STLC++高效编程守则视情况而变化,取决于你使用C++的哪一部分。条款02尽量与const,enum,inline替换#define对于单纯常量,最好以const对象或enums替换#defines。对于形似函数的宏(macros),最好改......
  • 一定要收藏的5个优秀的SpringCloud开源项目
    今天再为大家推荐几个优秀的SpringCloud开源脚手架项目,开箱即用,不管是学习还是开发新项目,都非常不错。伟大的作家鲁迅先生曾说过:能直接用,绝不重复造轮子 img好了,不多bb,上才艺!1、pig基于SpringCloud2020、SpringBoot2.5、OAuth2的RBAC权限管理系统。gitee......