題意:給定一些正數,去掉給定個數的最大值和給定個數的最小值,輸出其餘數字的平均數。
思路:建立乙個大頂堆,乙個小頂堆。大頂堆的大小為去掉的最小值個數,存放當前的若干最小值。遍歷資料的同時維護這兩個堆,最後堆中的資料即為需要去掉的資料。
輸入:1 2 5
1 2 3 4 5
4 2 10
2121187 902 485 531 843 582 652 926 220 155
0 0 0
輸出:3.500000
562.500000
#include #include #define n 15
int n1,n2,n;
int heap1[n],heap2[n];
void update1(int i)
heap1[i/2] = x;
}void update2(int i)
heap2[i/2] = x;
}int main()
else if(j>heap1[1])
if(i<=n2)
else if(j
POJ2833優先佇列
見題號吧 就是說有n個評分,裁判系統需要減去n1個最高分和n2個最低分,然後求出平均分.n1 n2 由於題給的記憶體大小為10000kb,而乙個5,000,000的陣列需要4 5000000 b 20000kb 會超出記憶體限制於是,不能存5000000陣列 我們想到用2個優先佇列模擬n1個最大值,...
POJ 2442 Sequence 堆的應用
poj 2442 給出m行n列,每行選乙個數組成乙個和,有nm 個結果,問前n小的和是哪些.超記憶體 一開始想的思路是以乙個和作為元素用優先佇列,感覺思路還是比較巧妙,有點類似於dijkstra。先把每一行排序,每行的第乙個元素組成的和一定是最小的,通過改變最小的和中某個數 將它右移一位 可以得到n...
堆以及堆的相關應用
本文中的堆是一種樹形資料結構,可以把堆看成一種特殊的完全二叉樹,再從二叉樹上加上一些限制條件即可以構成堆。即要求父節點元素全部都大於或等於子節點元素,或者小於等於。這就構成了倆種堆 堆的常見應用為 使用堆進行排序,也就是常說的堆排序,時間複雜度為nlgn 這是比較排序時間複雜度的下限,即使用比較的排...