NC17315 揹包(優先佇列 二分)

2022-05-27 10:27:12 字數 885 閱讀 4232

這題奇數部分比較容易想到,用優先佇列維護每個位置前能否取到指定個數,這樣列舉每個位置座位中位數即可

對於偶數,由於兩個數字置不確定,並且不能列舉兩個,因此還是考慮要維護乙個

這樣就需要乙個log複雜度以內的演算法找到每個對應的最優解,常見的就是二分演算法

我們觀察題目性質,果然符合單調性,因為對於左邊定好的數,第二個肯定越右越好,並且我們知道越右滿足條件的難度越大,因此考慮二分找到最右點

#includeusing

namespace

std;

typedef

long

long

ll;typedef pair

pll;

const

int n=2e5+10

;const

int inf=1e9;

const

int mod=1e9+7

;ll v,n,m;

ll pre[n],suf[n];

priority_queue

q;struct

nodes[n];

bool

cmp(node a,node b)

intmain()

sort(s+1,s+1+n,cmp);

for(i=1;i<=n;i++)

}while

(q.size())

q.pop();

for(i=n;i>=1;i--)

}ll ans=0

;

if(m%2

) }

cout

}else

else}}

cout

}return0;

}

view code

Processor 二分搜尋,優先佇列

題意 給出n個任務完成區間以及工作量,求出最快處理速度.思路 用二分搜尋匹配最優速度,其中還用到優先佇列輔助.列舉所有截止時間,在此時間內的都進隊,按照工作截止時間越早越先出隊,如果截止時間不及列舉的截止時間,則錯過 include include include include includeus...

多重揹包(普通 二分優化)

有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行三個整數 vi,wi,s...

LA4254 二分 貪心 優先佇列

題目 有n個任務,每個任務有三個引數ri,di,wi,表示任務i必須在 ri,di 內執行完,現有一台處理器,處理器執行的速度可以變化,速度為s時,乙個工作量為wi的任務執行的時間為w s,任務不一定連續執行,現在要求求出處理器在執行過程中最大速度的最小值。分析 首先一定是個二分,所以主要的地方在於...