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

D004 二叉堆 序列合并 P1631 洛谷

P1631 序列合并 数据较弱

题意: 给两个长度为 \(N\) 的单调不降序列 \(A,B\) ,在 \(A,B\) 中各取一个数可以得到 \(N^2\) 个和,求这 \(N^2\) 个和的最小的 \(N\) 个。

序列一: \(A_1,A_2,A_3\cdots A_N\)

序列二: \(B_1,B_2,B_3\cdots B_N\)

大根堆维护

大根堆维护最小的 \(N\) 个,时间复杂度为 \(O(N^2)\) 数据较弱剪枝可以通过。

  1. \(A_1\) 与序列二组合初始化大根堆。
  2. 枚举剩余的 \(A\) 元素和 \(B\) 元素的和不断地与堆顶比较,小于就替换堆顶元素,大于 break
  3. 最后堆中的元素就是最小的 \(N\) 个。

思路简单,但实现起来有点麻烦,基础太差了说是(

  1. Python 的 heapq 模块是小跟堆,对已知的数组需要 heapify 进行堆化,如果从空数组开始 heappush 的话就不用堆化。
  2. 不需要弹出时直接使用索引获取堆顶元素 \(hq[0]\) 来进行比较等操作。
  3. heapreplace 函数可以很方便的替换堆顶元素。

具体代码为

import sys
from heapq import heappop, heappush, heapify, heapreplace
if 1:inp = lambda: sys.stdin.readline().strip()II = lambda: int(inp())MII = lambda: map(int, inp().split())LII = lambda: list(MII())Max = lambda x, y: x if x > y else yMin = lambda x, y: x if x < y else ydef main():n = II()a = LII()b = LII()hq = [-(a[0] + b[i]) for i in range(n)]heapify(hq)  #! 细节三 已知的数组必须要堆化for i in range(1, n):#! 细节二if a[i] + b[0] >= -hq[0]:breakfor j in range(n):val = a[i] + b[j]if val >= -hq[0]:breakelse:heapreplace(hq, -val)  #! 细节一print(*sorted([-x for x in hq]))if __name__ == "__main__":main()

小根堆多路合并

\(A\) 中每一个数都和 \(B\) 相加得到 \(N\) 个递增的序列,先将第一列放入小根堆中。

  • \(A_1+B_1 \le A_1+B_2\le \cdots \le A_1 + B_N\)
  • \(A_2+B_1 \le A_2+B_2 \le \cdots \le A_2 + B_N\)
  • \(\cdots\)
  • \(A_N+B_1 \le A_N+B_2 \le \cdots \le A_N + B_N\)
  1. 取出小根堆的堆顶元素放入数组,然后将其所在队列的后一位元素放入堆中。因此需要记录下标。
  2. 这样循环操作 \(N\) 次就可以得到最小的 \(N\) 个元素了。

时间复杂度为 \(N\log N\)

具体代码为

# 模版代码直接复制即可
def main():n = II()a = LII()b = LII()hq = []for i, x in enumerate(a):heappush(hq, (b[0] + x, i, 0))ans = []for _ in range(n):cur, i, j = heappop(hq)ans.append(cur)if j + 1 < n:  # 防止越界heappush(hq, (a[i] + b[j + 1], i, j + 1))print(*ans)
http://www.jsqmd.com/news/416944/

相关文章:

  • 位操作 之二
  • 2月23日
  • 分析广东佛山信誉好的门店引流方法费用多少,性价比高吗 - mypinpai
  • 最新!2026江苏车铣复合培训学校排行情况,PLC培训/UG培训/车铣复合培训/走心机培训,车铣复合培训机构推荐排行 - 品牌推荐师
  • 2026船用安全阀市场:口碑企业引领安全新标准,船用疏水阀/船用减压阀/船用阀门附件,船用安全阀实力厂家口碑推荐 - 品牌推荐师
  • 2026年国内可靠的投影机出租公司排名,楼体投影机出租/艺术展览投影机出租/2万流明投影机出租,投影机出租公司哪家强 - 品牌推荐师
  • 2026年电商ERP系统推荐:多平台集成与数据安全评测,解决效率与合规核心痛点 - 十大品牌推荐
  • 想知道2026年2月受欢迎的成都火锅品牌有哪些?看这里,社区火锅/成都火锅/附近火锅/重庆火锅,成都火锅品牌推荐排行 - 品牌推荐师
  • 2026年知名的徽派仿古铝瓦/砖红色仿古铝瓦品牌厂家推荐哪家强 - 行业平台推荐
  • 20260226 总结
  • 2026年质量好的高温厂房节能改造/能源合同管理厂房节能改造销售厂家采购建议选哪家 - 行业平台推荐
  • 2026年电商ERP系统推荐:基于行业应用实测评价,针对成本与合规痛点精准指南 - 十大品牌推荐
  • 2026年西安物流公司推荐:基于多行业应用实测排名,针对供应链稳定性与专业化服务痛点 - 十大品牌推荐
  • 如何为不同规模电商选ERP?2026年电商ERP系统推荐与评测,直击效率痛点 - 十大品牌推荐
  • 位操作 之三
  • 如何选适配的电商ERP?2026年电商ERP系统推荐与评价,解决集成与扩展痛点 - 十大品牌推荐
  • 2026年口碑好的高速切铝机铝材切割设备/切铝机铝材机成型设备厂家推荐与选择指南 - 行业平台推荐
  • 微信立减金还在硬花?上京顺回收,闲置秒变现 - 京顺回收
  • 2026年电商ERP系统推荐:2026年技术趋势与稳定性排名,涵盖全渠道与安全痛点 - 十大品牌推荐
  • 2026年西安物流公司推荐榜单发布:以陕西互帮供应链为代表的标杆企业深度解析。 - 十大品牌推荐
  • 2月17日
  • 2026年电商ERP系统推荐:全渠道场景深度评测,涵盖订单与财务协同核心痛点 - 十大品牌推荐
  • 如何为不同规模选电商ERP?2026年电商ERP系统全面评测与推荐,直击扩展性痛点 - 十大品牌推荐
  • 2026年口碑好的塑料吹塑/异形吹塑人气实力厂商推荐 - 行业平台推荐
  • 位操作 之一
  • 2026年知名的管道防冻电伴热带/阻燃防爆电伴热带厂家实力参考 - 行业平台推荐
  • 2026年口碑好的搪玻璃三合一设备/山东不锈钢三合一设备厂家口碑推荐汇总 - 行业平台推荐
  • 2026年电商ERP系统推荐:基于行业应用实测评价,针对成本与协同痛点精准指南 - 十大品牌推荐
  • 2026年知名的澳洲移民职业匹配/澳洲移民政策解读哪家强生产厂家实力参考 - 行业平台推荐
  • 2026烘箱源头厂家推荐:技术实力与产品品质解析 - 品牌排行榜