ZR860 扁鵲再世蔡徐坤 (貪心 堆)

2021-10-03 00:19:16 字數 1427 閱讀 4817

有 n

nn 位病人,坤坤有 vml

v \ ml

vml 鎮靜劑。第 i

ii 位病人的緊急程度為 a

ia_i

ai​,鎮靜所需劑量至少為 b

ib_i

bi​。若選了 k

kk 個病人 c1∼

ck

c_1 \sim c_k

c1​∼ck

​,則病人 c

jc_j

cj​ 將得到 acj

∑i=1

kacj

×v

\frac}^k a_} \times v

∑i=1k​

acj​

​acj

​​​×

v 的劑量。求最多穩定的病人數。

1 ≤n

≤2×1

05

1 \leq n \leq 2 \times 10^5

1≤n≤2×

105用 a

ia_i

ai​、b

ib_i

bi​、v

vv 計算出病人穩定能接受的最大的 ∑i=

1kac

j\sum_^k a_

∑i=1k​

acj​

​,記作 s

is_i

si​。根據 s

is_i

si​ 將病人從大到小排序。在排序後的病人中,從頭列舉乙個 k

kk 作為 s

ss 最小的人,那麼 s

is_i

si​ 比它大的人再保證加上 a

ia_i

ai​ 後不超過 s

ks_k

sk​ 的前提下是可選的,可以發現隨著 k

kk 越來越小,能加入的病人也越來越多。所以維護乙個資料結構,能插入乙個數,維護最小元素讓它們總和不超過 s

ks_k

sk​,上大根堆即可。如果當前的總和超過 s

ks_k

sk​ 就不斷彈出。

#include

using

namespace std;

struct noded[

200001];

priority_queue <

int, vector<

int>

, less<

int>

> q;

bool

cmp(node a, node b)

int n, v, ans, cnt;

long

long sum;

intmain()

ans =

max(ans,cnt);}

printf

("%d\n"

, ans)

;return0;

}