当前位置: 首页 > 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.jsqmd.com/news/130629/

相关文章:

  • Apache Ignite 广告实时竞拍系统架构全攻略
  • 基于SpringBoot的冷链运输生鲜销售系统计算机毕业设计项目源码文档
  • 导游证教程资源合集
  • 大模型打分机制揭秘:为何需要多次更换位置进行评分?
  • 什么是智能问数
  • 12/23
  • 中望3D2026曲面建模技巧:利用「缠绕到面」功能将平面特征精准移植到曲面
  • 完整教程:[百题重刷]前缀和 + Hash 表:缓存思想, 消除重复计算
  • 完整教程:[百题重刷]前缀和 + Hash 表:缓存思想, 消除重复计算
  • SRC 漏洞挖掘全流程攻略:小白→挖洞达人,学习路线 + 配套工具全曝光
  • 基于微信小程序的零工市场服务系统计算机毕业设计项目源码文档
  • LLM之Agent完全指南:从零构建AI Agents的7大核心类型与实战代码!
  • 2026金三银四必备国内大厂Java面试高频题库整理!
  • 【Unity】各种操作触发GC情况
  • 【技术美术】D3D中GPU渲染管线流程详解
  • vscode使用vs环境运行程序
  • java基础-HashMap
  • 万能欧几里得板子
  • 万能欧几里得板子
  • Mercado Libre(美客多)拉美市场研究指南:十款实用工具助力跨境运营分析
  • 一张Transformer-LSTM模型的结构图
  • 稀疏注意力机制
  • 茶颜悦色X北森|如何用AI面试官帮HR工作量直降90%!
  • 【技术美术】渲染空间变换概述
  • 【负荷预测】基于变分模态分解(VMD-CNN-LSTM)的短期电力负荷预测Python代码
  • AI智能预警系统:矿山、工厂与油气站安全管理架构浅析
  • 流量洪峰冲不垮的秘密:揭秘系统过载保护的核心防线
  • 【技术美术】程序化噪波实现
  • 【排序算法全家桶 Level 2】选择排序:从“双向奔赴”的陷阱到堆排序的“降维打击”
  • Java毕设选题推荐:基于springboot+vue的社区资源共享系统设计与实现社区公共资源(活动室、工具房),实现在线预约与使用登记【附源码、mysql、文档、调试+代码讲解+全bao等】