码迷,mamicode.com
首页 > 其他好文 > 详细

【二叉堆】k路归并问题(BSOJ1941)

时间:2015-08-21 00:08:21      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:

Description

  有n个函数,分别为F1,F2,...,Fn。定义Fi(x)=Ai*x^2+Bi*x+Ci(x∈N*)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个)。

Input

  第一行输入两个正整数n和m。以下n行每行三个正整数,其中第i行的三个数分别位Ai、Bi和Ci。Ai<=10,Bi<=100,Ci<=10 000。

Output

  输出将这n个函数所有可以生成的函数值排序后的前m个元素。这m个数应该输出到一行,用空格隔开。

Sample Input

3 10
4 5 3
3 4 5
1 7 1

Sample Output

9 12 12 19 25 29 31 44 45 54

Hint

  n,m<=10,000

Thinking

  首先根据二次函数的知识可以判断出,这里的每个函数在x>0范围内都是单调递增的。

  可以根据堆的思想做这道题。开始时将每一个函数的第一个函数值加入小根堆,注意这里堆必须记录是第几个函数。每次取出堆顶元素加入到答案中,同时将堆顶元素所在的函数下标+1,将新得到的函数值加入堆中。重复以上步骤直到取出m个答案。

  时间复杂度O(mlogn)

Code

  暂无(偷个小懒明天再写)

【二叉堆】k路归并问题(BSOJ1941)

标签:

原文地址:http://www.cnblogs.com/Hist/p/4746495.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!