總時間限制: 3000ms 單個測試點時間限制: 1000ms 記憶體限制: 65536kb
描述 定義乙個陣列,初始化為空。在陣列上執行兩種操作:
1、增添1個元素,把1個新的元素放入陣列。
2、輸出並刪除陣列中最小的數。
使用堆結構實現上述功能的高效演算法。
輸入 第一行輸入乙個整數n,代表操作的次數。
每次操作首先輸入乙個整數type。
當type=1,增添操作,接著輸入乙個整數u,代表要插入的元素。
當type=2,輸出刪除操作,輸出並刪除陣列中最小的元素。
1<=n<=100000。
輸出 每次刪除操作輸出被刪除的數字。
樣例輸入
4 1 5
1 1
1 7
2 樣例輸出
1 提示
每組測試資料的複雜度為o(nlogn)的演算法才能通過本次,否則會返回tle(超時)
需要使用最小堆結構來實現本題的演算法
#include
#include
#include
#include
using
namespace
std;
////要背過最小堆的實現
int n,t,u;
priority_queue,greater >q;
int main(int argc, char** argv)
if(t==2)
1 實現堆結構
總時間限制 3000ms 記憶體限制 65535kb 描述 定義乙個陣列,初始化為空。在陣列上執行兩種操作 1 增添1個元素,把1個新的元素放入陣列。2 輸出並刪除陣列中最小的數。使用堆結構實現上述功能的高效演算法。輸入第一行輸入乙個整數t,代表測試資料的組數。對於每組測試資料,第一行輸入乙個整數n...
C 堆結構 陣列實現
要說最大堆和最小堆,就得先知道最大樹和最小樹。每個結點的值都大於 小於 或等於其子節點 如果有的話 值的樹,就叫最大 最小 樹。最大堆 最小堆 是最大 最小 完全樹。由於堆是完全二叉樹,所以可以用公式化描述,用一維陣列來有效的描述堆結構。利用二叉樹的性質 如果對一棵有n個結點的完全二叉樹的結點按層序...
C 堆結構 陣列實現
要說最大堆和最小堆,就得先知道最大樹和最小樹。每個結點的值都大於 小於 或等於其子節點 如果有的話 值的樹,就叫最大 最小 樹。最大堆 最小堆 是最大 最小 完全樹。由於堆是完全二叉樹,所以可以用公式化描述,用一維陣列來有效的描述堆結構。利用二叉樹的性質 如果對一棵有n個結點的完全二叉樹的結點按層序...