原題位址
題目描述
有n個函式,分別為f1,f2,…,fn。定義fi(x)=aix^2+bix+ci (x∈n*)。給定這些ai、bi和ci,請求出所有函式的所有函式值中最小的m個(如有重複的要輸出多個)。
輸入輸出格式
輸入格式:
輸入資料:第一行輸入兩個正整數n和m。以下n行每行三個正整數,其中第i行的三個數分別位ai、bi和ci。ai<=10,bi<=100,ci<=10 000。
輸出格式:
輸出資料:輸出將這n個函式所有可以生成的函式值排序後的前m個元素。這m個數應該輸出到一行,用空格隔開。
輸入輸出樣例
輸入樣例#1:
3 10
4 5 3
3 4 5
1 7 1
輸出樣例#1:
9 12 12 19 25 29 31 44 45 54
說明
資料規模:n,m<=10000
**:
本題建立小根堆。
#include
#include
#include
#include
#include
#include
using namespace std;
int n,m;
int a[
10010
],b[
10010
],c[
10010
],f[
10010
],ans[
10010];
//a,b,c為函式引數,f[i]為第i個函式x的值,ans為結果
struct nod
qq[20010];
//陣列大小為2n
void
swap
(int u,
int v)
//交換函式
void
mini
(int x)
//比較函式
}void
build()
//建立根堆
intmain()
build()
;for
(i=1
;i<=m;i++
)for
(i=1
;i)printf
("%d "
,ans[i]);
printf
("%d\n"
,ans[m]);
return0;
}
筆記 堆排序
堆排序只需要記錄乙個記錄大小的輔助空間,每個待排序的記錄僅占有乙個儲存空間。堆的定義 n個元素的序列 當且僅當滿足如下關係時,稱之為堆。ki k2ik i k2 i 1 或 ki k 2iki k2i 1 i 1,2,3,n 2 若將和此序列對應的一維陣列看成是乙個完全二叉樹,則堆的含義表明,完全二...
演算法筆記 堆排序
堆排序是一種原地的,時間複雜度為 o nlogn 的排序演算法。快速排序的時間複雜度也是 o nlogn 甚至堆排序比快速排序的時間複雜度還要穩定,但是快速排序的效能要比堆排序好。什麼是堆 堆是乙個完全二叉樹。堆上任一節點的值都大於等於它的左右子樹的值,或者小於等於它的左右子樹的值。對於每個節點大於...
堆排序學習筆記
參考此文的學習筆記 不用交換,則已經是最大堆,不用迴圈了 else break void sort int a,int length 開始排序,排序是從上到下從左到右的調整 for int j length 1 j 0 j int main sort a,length for int i 0 i l...