当前位置: 首页 > 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.gsyq.cn/news/143440.html

相关文章:

  • Excel表格大全:模板+教程合集(每日更新)
  • csq-蓝桥杯python-基础语法3-循环语句进阶
  • csq-蓝桥杯python-基础语法3-循环语句进阶
  • 论文写作必备神器:7款AI工具实测,30分钟生成1万字真实参考文献
  • 2026主管护师考试视频课深度测评:阿虎医考王者强训班成为优选课程 - 资讯焦点
  • 20、应用盈利与上架Windows应用商店全攻略
  • 【Unity】未来技术路线
  • HarmonyOS 5开发从入门到精通(十八):新闻阅读应用实战(下)
  • 21、将应用推向Windows应用商店的全面指南
  • 实用指南:电脑摄像头打不开?【图文详解】电脑摄像头怎么安装使用?电脑摄像头怎么打开?电脑怎么打开摄像头?
  • Java毕设项目推荐-基于springboot+vue的社区资源共享系统设计与实现闲置物品置换、宠物托管等互助信息【附源码+文档,调试定制服务】
  • Walrus Haulout 黑客松获胜名单揭晓
  • 【Unity】骨骼动画
  • 年底多跑跑前端面试就会发现…
  • 10366_基于Springboot的课程管理系统
  • 计算机毕业设计springboot基于JAVA的渝行旅游热点推荐系统 基于Spring Boot框架的重庆旅游热点智能推荐系统设计与实现 利用Java技术构建重庆旅游热点推荐平台的Spring Boo
  • 【Unity】光照解决方案笔记
  • Java毕设项目推荐-基于springboot的二手物品交易系统的设计与实现基于SpringBoot的闲置物品循环交易保障系统的设计与实现【附源码+文档,调试定制服务】
  • 别再被忽悠了!看完这篇文章,学会正确应对儿童近视的方法
  • 重要内容表述
  • C#易错点解析
  • 创新!高级!【日前、日内非滚动、日内滚动调度以及实时修正】考虑需求侧响应的智慧楼宇多时间尺度调度策略附Matlab代码
  • 【Linux】Linux使用笔记
  • 大模型打分机制揭秘:为何需要多次更换位置进行评分?
  • 中望3D2026曲面建模技巧:利用「缠绕到面」功能将平面特征精准移植到曲面
  • SRC 漏洞挖掘全流程攻略:小白→挖洞达人,学习路线 + 配套工具全曝光
  • 基于微信小程序的零工市场服务系统计算机毕业设计项目源码文档
  • vscode使用vs环境运行程序
  • java基础-HashMap
  • 【Unity】各种操作触发GC情况