洛谷P4602 CTSC2018 混合果汁

2022-05-16 07:01:10 字數 1418 閱讀 5613

小 r 熱衷於做黑暗料理,尤其是混合果汁。 商店裡有 n 種果汁,編號為 0, 1, 2, . . . , n − 1。i 號果汁的美味度是 di,每公升**為 pi。小 r 在製作混合果汁時,還有一些特殊的規定,即在一瓶混合果汁中,i 號果汁最 多只能新增 li 公升。 現在有 m 個小朋友過來找小 r 要混合果汁喝,他們都希望小 r 用商店裡的果汁 製作成一瓶混合果汁。其中,第 j 個小朋友希望他得到的混合果汁總**不大於 gj,體 積不小於 lj。在上述這些限制條件下,小朋友們還希望混合果汁的美味度盡可能地高, 一瓶混合果汁的美味度等於所有參與混合的果汁的美味度的最小值。請你計算每個小 朋友能喝到的最美味的混合果汁的美味度。

從檔案 juice.in 中讀入資料。

輸入第一行包含兩個正整數 n, m,表示果汁的種數和小朋友的數量。

接下來 n 行,每行三個正整數 di , pi , li,表示 i 號果汁的美味度為 di,每公升**為 pi,在一瓶果汁中的新增上限為 li。

接下來 m 行依次描述所有小朋友:每行兩個數正整數 gj , lj 描述乙個小朋友,表 示他最多能支付 gj 元錢,他想要至少 lj 公升果汁。

輸出到檔案 juice.out 中。

對於所有小朋友依次輸出:對於每個小朋友,輸出一行,包含乙個整數,表示他能 喝到的最美味的混合果汁的美味度。如果無法滿足他的需求,則輸出 −1。

3 41 3 5

2 1 3

3 2 5

6 35 3

10 10

20 1032

-11對於所有的測試資料,保證 n, m ≤ 100000,1 ≤ di , pi , li ≤ 10^5,1 ≤ gj , lj ≤ 10^18。

通過打表等一系列玄學方式可以發現答案具有單調性。二分乙個d,則我們只能選擇大於等於d的果汁。然後對所有大於等於d的果汁建立一棵以**為下標的權值線段樹,每個節點還要儲存一下總體積和**。這樣我們就可以在權值線段樹上用lim二分了。

但是不能每二分一次就重新建樹。我們可以建立一棵主席樹利用可持久化來解決這個問題。

#include #include #include #define int long long

#define n 100002

#define t 100000

using namespace std;

struct chairmantreet[n*40];

struct juicea[n];

int n,m,i,g[n],l[n],root[n],p;

int read()

return w;

}int my_comp(const juice &x,const juice &y)

else r=mid-1;

} printf("%lld\n",a[ans].d);

} return 0;

}

洛谷P4602 CTSC2018 混合果汁

小 r 熱衷於做黑暗料理,尤其是混合果汁。商店裡有 n n 種果汁,編號為 0,1,cdots,n 10,1,n 1 i i 號果汁的美味度是 d idi 每公升 為 p ipi 小 r 在製作混合果汁時,還有一些特殊的規定,即在一瓶混合果汁中,i i 號果汁最多只能新增 l ili 公升。現在有 ...

洛谷P2018 訊息傳遞

巴蜀國的社會等級森嚴,除了國王之外,每個人均有且只有乙個直接上級,當然國王沒有上級。如果a是b的上級,b是c的上級,那麼a就是c的上級。絕對不會出現這樣的關係 a是b的上級,b也是a的上級。最開始的時刻是0,你要做的就是用1單位的時間把乙個訊息告訴某乙個人,讓他們自行散布訊息。在任意乙個時間單位中,...

洛谷P2018 訊息傳遞

由題意得這是一棵樹,而任何乙個已經接到訊息的人,都可以把訊息告訴他的乙個直接上級或者直接下屬,說明是一棵無根樹。本來以為要用什麼高階樹上演算法亂搞,結果發現 n leq 1000 這不是dfs就能水過嗎?實際上是個樹規 欽定乙個結點為根,我們在有根樹上做樹規。對於結點 x 他的狀態由他的子結點決定。...