priority queue 滑動視窗

2022-10-05 19:06:11 字數 1350 閱讀 7715

#10175. 「一本通 5.5 例 1」滑動視窗 - 題目 - libreoj (loj.ac)

之前已經寫過這道題的題解(2022gdut寒假專題學習-1 b,f,i,j題 - blockche - (cnblogs.com)),當時用的是 deque 模擬單調佇列的方法來維護最大值,但後來突然發現其實可以直接用priority_queue 優先佇列來寫,方便很多。

經過對比,兩者的效率也是幾乎一樣的,但前者會快一點。

給乙個長度為 的陣列,乙個長為 的滑動窗體從最左端移至最右端,你只能看到視窗中的 個數,每次窗體向右移動一位,如下圖:

你的任務是找出窗體在各個位置時的最大值和最小值。

每個數和下標依次壓進 priority_queue , 此時佇列頭就是當前視窗的最大值 or 最小值

每次比較當前 i 和佇列頭的下標,如果佇列頭已經出了滑動視窗,則刪去,即i >= minn.top().second + k - 1時彈出佇列頭。

#include #include #include #include #include #define sf ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)

using namespace std;

typedef long long ll;

typedef pairp;

const int inf = 0x3f3f3f3f;

int main() ), minn.push();

for (int i = 1; i < n; ++i) ), minn.push();

if (i + 1 >= k) );

while (i >= minn.top().second + k - 1) minn.pop();

while (i >= maxn.top().second + k - 1) maxn.pop();}}

for (auto& x : ans) cout << x.first << ' ';

cout << '\n';

for (auto& x : ans) cout << x.second << ' ';

return 0;

}

PriorityQueue實現原理

priorityqueue priorityqueue是個基於優先順序堆的極大優先順序佇列 此佇列按照在構造時所指定的順序對元素排序,既可以根據元素的自然順序來指定排序 參閱 comparable 也可以根據 comparator 來指定 這取決於使用哪種構造方法。優先順序佇列不允許 null 元素...

priority queue 優先佇列)

佇列 先輸入先輸出 優先佇列使用方法 標頭檔案 include using namespace std 宣告方法 1.普通方法 priority queueq 下劃線不可漏,預設從大到小輸出隊 2.結構體宣告方式 struct node int x,y frinend bool operator n...

優先佇列 priority queue

優先佇列 是一種抽象資料型別,行為有些像佇列,但是他不是先進先出型佇列 先出優先佇列的元素是佇列中優先順序最高的元素。就像 急診病人插隊 優先佇列的標頭檔案也是 用 priority queuepq 來宣告。這個pq是乙個越小的整數優先順序越低的優先佇列。出隊元素不是先進隊的元素,出隊的方法由que...