總時間限制:
3000ms
記憶體限制:
65535kb
描述 定義乙個陣列,初始化為空。在陣列上執行兩種操作:
1、增添1個元素,把1個新的元素放入陣列。
2、輸出並刪除陣列中最小的數。
使用堆結構實現上述功能的高效演算法。
輸入第一行輸入乙個整數t,代表測試資料的組數。
對於每組測試資料,第一行輸入乙個整數n,代表操作的次數。
每次操作首先輸入乙個整數type。
當type=1,增添操作,接著輸入乙個整數u,代表要插入的元素。
當type=2,輸出刪除操作,輸出並刪除陣列中最小的元素。
1<=n<=100000。
輸出每次刪除操作輸出被刪除的數字。
樣例輸入
2樣例輸出51 1
1 21 322
41 5
1 11 7
2
121
提示每組測試資料的複雜度為o(nlgn)的演算法才能通過本次,否則會返回tle(超時)
需要使用最小堆結構來實現本題的演算法
用來熟悉堆結構。
#include#include#include#include#include#includeusing namespace std;
int a[100010];
int size;
void siftdown( int cike )//向下移動
else break;
}a[i] = temp;//回填
}void siftup( int cike )
a[temdian] = temp;//回填
}void insert( int t)
void del( )
int main()
else}}
return 0;
}
4078 實現堆結構
總時間限制 3000ms 單個測試點時間限制 1000ms 記憶體限制 65536kb 描述 定義乙個陣列,初始化為空。在陣列上執行兩種操作 1 增添1個元素,把1個新的元素放入陣列。2 輸出並刪除陣列中最小的數。使用堆結構實現上述功能的高效演算法。輸入 第一行輸入乙個整數n,代表操作的次數。每次操...
C 堆結構 陣列實現
要說最大堆和最小堆,就得先知道最大樹和最小樹。每個結點的值都大於 小於 或等於其子節點 如果有的話 值的樹,就叫最大 最小 樹。最大堆 最小堆 是最大 最小 完全樹。由於堆是完全二叉樹,所以可以用公式化描述,用一維陣列來有效的描述堆結構。利用二叉樹的性質 如果對一棵有n個結點的完全二叉樹的結點按層序...
C 堆結構 陣列實現
要說最大堆和最小堆,就得先知道最大樹和最小樹。每個結點的值都大於 小於 或等於其子節點 如果有的話 值的樹,就叫最大 最小 樹。最大堆 最小堆 是最大 最小 完全樹。由於堆是完全二叉樹,所以可以用公式化描述,用一維陣列來有效的描述堆結構。利用二叉樹的性質 如果對一棵有n個結點的完全二叉樹的結點按層序...