POJ 1442 Black Box 優先佇列

2021-06-21 11:51:19 字數 1237 閱讀 2003

優先佇列。。剛開始用蠢辦法,經過乙個vector容器中轉,這麼一來一回這麼多趟,肯定超時啊。

超時**如下:

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define n 30003priority_queue

,greater >que;

inta[n];

vector

tmp;

intmain()

th++;

for(h=1;h)

printf(

"%d\n

",que.top());

for(h=0;h)

que.push(tmp[h]);

tmp.clear();}}

return0;

}

view code

後來看了網上某位大牛的,說是用兩個優先佇列,乙個從大到小的,乙個從小到大的,元素在這兩個中間中轉,可以大大縮短時間。

**:

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define n 30003priority_queue

,greater > stobig; //

從小到大排,先出小的

priority_queue,less > btosmall; //

從大到小排,先出大的

inta[n];

intmain()

printf(

"%d\n

",stobig.top());

btosmall.push(stobig.top());

//還給它,保證語句1能夠成立

stobig.pop();}}

return0;

}

view code

POJ 1442 Black Box 優先佇列

poj 1442 可以當做是優先佇列的模板 poj 1442 題意 給定m個數,每次可以插入序列乙個數 再給n個數,表示在插入第幾個數時輸出乙個數,第一次輸出序列中最小的,第二次輸出序列中第二小的 以此類推,直到輸出n個數。優先佇列的使用 本題思路是建立乙個小頂堆 和乙個大頂堆 儲存前 個小的數,且...

poj1442 優先佇列oye

歷經磨難終於解決了這題,原來用stl可以這麼簡單 這題的思路 用stl弄2個優先佇列,big佇列優先彈出最小的,small佇列優先彈出最大的,若要求第i小的數字,只要滿足small佇列裡有i個元素,且small佇列的top比big佇列的top小,則small的top就是第i小的數字。關於優先佇列記住...

POJ 1442 Treap 板子記錄

題意 給乙個序列,然後給出m個查詢,每次查詢輸入乙個數x,對於第i次查詢,輸出前x個數中第i大的關鍵字的值。解題方法 就是裸treap板子了,先介紹一下treap。treap是一棵二叉搜尋樹,只是每個節點多了乙個優先順序fix,對於每個節點,該節點的優先順序小於等於其所有孩子的優先順序。當然,引入優...