当前位置: 首页 > news >正文

CF1051G

CF1051G

标签 并查集,线段树合并

对于一个包含 \(k\) 个数对 \((a_i, b_i)\) 的集合 \(S\),记 \(f(S)\) 表示执行以下操作让所有 \(a_i\) 均不同的最小代价。

  • 选择一个 \(i\),若存在 \(i \ne j, a_i = a_j\),可以花 \(b_i\) 的代价使 \(a_i + 1\)
  • 选择一个 \(i\),若存在 \(j, a_i = a_j + 1\),可以花 \(-b_i\) 的代价使 \(a_i - 1\)

给定 \(n\)\((a_i, b_i)\),对于 \(k = 1, 2, \dots , n\),求出有 \((a_1, b_1) \sim (a_k, b_k)\) 组成的 \(S\)\(f(S)\)

\(n \le 2 \times 10^5\)

先考虑对连续的一段数,最后会变成什么?假设有 \(c\) 个数,最小的为 \(x\),那么这 \(c\) 个数最后会变成 \(x, x + 1, x + 2, \dots ,x + c - 1\)(因为没有 \(c - 1\),所以无法变得比 \(c\) 更小。)

考虑到让 \(a_i \pm 1\) 的代价可以抵消,不妨先让所有数都变成 \(x\),再把它们变成 \(x, x + 1, \dots\)

  • 前面这个部分的代价是 \(-\sum (a_i - x)b_i = \min\{a_i\}\sum b_i - \sum a_i \cdot b_i\)

  • 后面的部分,肯定是贪心的让 \(b_i\) 大的少移动,小的多移动,从而减小代价。也就是如果 \(b_i\) 从大到小的排名为 \(k_i\),则它的代价是 \(b_i(k_i - 1)\)

于是我们就计算出了单个 \(S\) 的代价,现在考虑插入。

不难想到,插入一个元素其实就是进行连续段(连通块)进行合并。合并时第一个部分比较好处理,维护 \(\min \{a_i\}, \sum b_i, \sum a_i \cdot b_i\), 即可。后面的部分可以对于 \(b\) 建出值域线段树,维护区间的 \(b\) 的个数以及 \(\sum b\),然后进行线段树合并即可。

合并时考虑 \(a_i - 1, x + c - 1, x + c\) 这三个位置即可(比较特殊的是 \(x + c - 1\),即如果之前没有数是 \(x + c - 1\),以后出现也要算在内,\(a_i - 1, x + c\) 是当前连续段左边、右边相邻的那个)。

计算贡献时,先减掉原来两段的,再加上合并完那一段的即可。

时间复杂度:\(O(n \log V)\),虽然这个题 \(V = n\)

http://www.zskr.cn/news/143439.html

相关文章:

  • 【生活杂谈】关于我对数学和世界的感悟
  • 整洁架构小文档
  • 大健康行业品牌营销战略咨询怎么做?奇正沐古解决行业难题 - 资讯焦点
  • 一次架构调整,让人工介入减少了一半
  • Rhino 8.18 超详细下载安装教程!附激活教程+下载渠道(亲测有效)
  • 苏州牙科哪里好?补牙、拔牙、美白、矫正、种植,一站式攻略请收好 - 品牌日记
  • Leetcode 84 水果成篮 | 删除子数组的最大得分
  • AI开发者的“救命稻草“:RAG、知识库和Embedding,让大模型无所不知!
  • 【Unity】未来技术路线
  • 个人总结
  • 传统算法vs大模型应用开发工程师,零基础转行选谁?
  • Sonatype Nexus Repository Manager —— 详细、系统性介绍
  • 【AI革命】Deep Research深度研究:大模型如何实现复杂任务推理?零基础也能学会的多智能体技术!
  • Java毕设选题推荐:基于SpringBoot的闲置物品循环交易保障系统的设计与实现基于springboot的二手物品交易系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 负载越来越大,传统互感器为什么开始拖企业用电管理的后腿?
  • 1.1 Python的前世今生
  • 2-SAT
  • 别急着除法!这道题真正想教你的,是“工程级思维”
  • 经典算法题型之复数乘法(二)
  • ❾⁄₄ ⟦ OSCP ⬖ 研记 ⟧ 防病毒软件规避 ➱ 内存中的逃避技术(上)
  • 【Unity实用插件】SpriteDicing 2.1.0 中文文档
  • 大模型开发避坑指南:医学RAG技术全面失效,专家揭示4大致命问题,开发者必看!
  • 2.1 变量与数据类型
  • 为什么闪回数据库后,必须用alter database open resetlogs;而不是普通的alter database open;
  • Java毕设项目推荐-基于springboot的传媒公司传媒直播直播运营管理系统设计与实现【附源码+文档,调试定制服务】
  • 突破井下数据存储瓶颈:超200℃存储芯片技术助力油气勘探迈向更深地层
  • 神经网络基础【笔记向】
  • 计算机毕业设计springboot教研室管理系统设计与实现 基于Spring Boot的高校教研室信息化管理系统开发与应用 Spring Boot框架下教研室综合管理平台的设计与实现
  • 《斯坦福CS336》作业开源,含讲解视频,带你从0手搓大模型|硬核教程
  • CAGR2.9%,全球石英波片市场稳步扩张,中国市场增速领跑