比較典型的應用優先佇列的題。題目是在乙個長為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容器...