優先佇列 51Nod逛街

2021-10-07 21:53:18 字數 995 閱讀 1528

比較好的一道題,我們定義三個堆,q1,q2,q3,前兩個堆維護的要去的商店,q3維護的是不去的商店。當q1中的數量大於k之後我們就可以討論q2和q3了,如果我們q2中有的時間大於q3的時間那麼就可以交換,以便騰出更多的時間來逛更多的商店。

#include

#define int long long

#define lowbit(x) x&(-x)

using

namespace std;

#define it (int)

const

int n=

1e5+10;

int a[n]

,b[n]

,c[n]

,n,t,k;

priority_queue<

int> q1,q2;

priority_queue<

int,vector<

int>

,greater<

int>

>q3;

signed

main()

}else

if(q1.

size()

continue;if

(t1+a[i]

>t)

continue

;int rest=t-t1-a[i]

;while

(!q3.

empty()

&&q3.

top(

)top())

while

(!q2.

empty()

&&restwhile

(!q3.

empty()

&&rest>=t2+q3.

top())

if(rest>=t2&&k+it q2.

size()

>res)

}printf

("%d\n"

,res)

;}

51Nod 消滅兔子 (優先佇列)

消滅兔子 李陶冶 命題人 基準時間限制 1 秒 空間限制 131072 kb 分值 40 有n只兔子,每只有乙個血量b i 需要用箭殺死免子。有m種不同型別的箭可以選擇,每種箭對兔子的傷害值分別為d i 為p i 1 i m 假設每種箭只能使用一次,每只免子也只能被射一次,計算要消滅地圖上的所有兔子...

51Nod 活動安排問題(排序 優先佇列)

有若干個活動,第i個開始時間和結束時間是 si,fi 同乙個教室安排的活動之間不能交疊,求要安排所有活動,最少需要幾個教室?input 第一行乙個正整數n n 10000 代表活動的個數。第二行到第 n 1 行包含n個開始時間和結束時間。開始時間嚴格小於結束時間,並且時間都是非負整數,小於10000...

51nod 演算法馬拉松12 逛街 treap

做法 首先看找滿足 ci 的和等於 k 的位置.沒有則輸出 1.把掃到過的商店的bi值插入到treap裡面,暴力列舉lyk最後訪問的是當前的這個位置,用treap找剩下還能夠用的時間left 所能訪問的前面的商店的個數,更新答案.有乙個坑點就是k等於0的時候,re了幾次 include includ...