bjfu1262 優先佇列

2022-08-17 22:48:10 字數 1912 閱讀 7388

比較典型的應用優先佇列的題。題目是在乙個長為n的陣列中,依次問m個數中的最小值。那麼把值和下標做成乙個結構體,放進優先佇列裡,每次移動視窗就把該t的t掉,剩下的最小值就是答案,複雜度nlogn,輕鬆ac。

/*

* author : ben */

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

/** 輸入非負整數

* 支援short、int、long、long long等型別(修改typec即可)。

* 用法typec a = get_int();返回-1表示輸入結束 */

typedef

inttypec;

typec get_int()

res = ch - '0'

;

while ((ch = getchar()) >= '

0' && ch <= '9'

) res = res * 10 + (ch - '0'

);

return

res;}//

輸入整數(包括負整數,故不能通過返回值判斷是否輸入到eof,本函式當輸入到eof時,返回-1),用法int a = get_int2();

intget_int2()

res = ch - '0'

;

while ((ch = getchar()) >= '

0' && ch <= '9'

) res = res * 10 + (ch - '0'

);

if (flag == 1

) res = -res;

return

res;}/*

* * 輸入乙個字串到str中,與scanf("%s", str)類似,

* 會忽略掉緩衝區中的空白字元。返回值為輸入字串

* 的長度,返回-1表示輸入結束。 */

int get_str(char *str)

}int i = 0

;

while (c > '')

str[i] = 0

;

returni;}

const

int maxn = 100009

;typedef

struct

evil

} evil;

inline

bool

operator

<(const evil &e1, const evil &e2)

return e1.id >e2.id;

}int

data[maxn];

intmain()

int i = 0

;

for (; i < m; i++)

printf("%d

", pq.top().hp);

for (; i < n; i++)

printf("%d

", pq.top().hp);

}putchar('\n

');}

return0;

}

XTU1262 優先佇列

使用優先佇列模擬一下就可以了,但是需要注意進行優化,題目有b 0的情況,也就是說無論如何撈魚都不會變,這種情況需要直接優化掉,不能進行模擬,否則會超時。include define ll long long define up i,l,h for int i l i define down i,h,...

HAUTOJ 1262魔法寶石 優先佇列

題目鏈結 比賽場上是暴力懟過去的,回來補題學了個優先佇列的想法 因為寶石的合成情況可能有巢狀,比如1和2生成3,1和3生成2,2和3生成1,如果用dp去做的話,那麼就會形成乙個迴路,就沒辦法當做樹形dp搞了 所以我們要想到,如果出現了某個生成環,那麼其環三個元素中,魔力值最小的那個一定不可被更新,所...

優先佇列(3道優先佇列問題)

優先佇列是一種十分強大的資料結構,它保持了一種動態的有序性,對於不斷改變有入隊的操作,而又需要某種最大或最小的操作的問題是再合適不過了,通常優先佇列的實現是由最小堆或者最大堆完成的,並通過堆排序保持佇列的有序性,模擬佇列的結構,在實際比賽中要寫乙個堆排序還是要一定的時間的,但是stl中queue容器...