有 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;
}