CTSC 2018 混合果汁

2022-05-04 23:12:08 字數 1753 閱讀 3080

[題目鏈結]

[演算法]

對於每組詢問 , 首先二分答案

顯然 , 最優策略為優先選擇**低的

建立可持久化線段樹 , 簡單維護即可

時間複雜度 : o(nlogn ^ 2)

[**]

#includeusing

namespace

std;

#define n 100010typedef

long

long

ll;typedef

long

double

ld;typedef unsigned

long

long

ull;

struct

info

a[n];

intn , m , len;

intb[n] , rt[n];

struct

presitent_segment_tree

struct

node

a[n * 40

]; inline

void build(int &now , int l , int

r)

inline

void modify(int &now , int old , int l , int r , int x , int

y)

inline ll query(

int now , int l , int

r , ll x)

} pst;

template

inline void chkmax(t &x,t y)

template

inline void chkmin(t &x,t y)

template

inline void read(t &x)

inline

bool

cmp(info a , info b)

intmain()

sort(b + 1 , b + n + 1

); len = unique(b + 1 , b + n + 1) - b - 1

; sort(a + 1 , a + n + 1

, cmp);

for (int i = 1; i <= n; i++) a[i].p = lower_bound(b + 1 , b + len + 1 , a[i].p) -b;

pst.build(rt[

0] , 1

, len);

for (int i = 1; i <= n; i++) pst.modify(rt[i] , rt[i - 1] , 1

, len , a[i].p , a[i].l);

while (m--)

else rr = md - 1

; }

if (pst.a[rt[loc]].cnt >= l && pst.query(rt[loc] , 1 , len , l) <=g)

else r = mid - 1

; }

if (ans == 0) puts("-1"

);

else printf("

%d\n

", ans);

}return0;

}

CTSC2018 混合果汁

為何要用整體二分,整體二分應該怎樣二分,和 poi2011 met meteors十分相像,這裡就不再重複。那麼對於乙個顧客來講,如果當前的區間總份數小於他想要的份數,或者是區間最小 大於他能接受的最大 就把該顧客劃分到右區間,如若滿足則劃分到左區間。想要和 poi2011 met meteors一...

CTSC2018 混合果汁

題目鏈結 luogu loj一道簡單的主席樹 考慮按 d 排序,然後二分乙個答案 x 對 geq x 的 d 建一棵主席樹即可.主席樹上維護兩個資訊 果汁的量和總價.然後在主席樹上二分即可.時間複雜度 o n log 2n 如下 好像才 38 行呢 include include include i...

BZOJ 5343 Ctsc2018 混合果汁

bzoj 5343 ctsc2018 混合果汁 二分答案 主席樹 題意 給出每個果汁的 p,美味度d,最多能放的體積l。定義果汁混合後的美味度為果汁的美味度的最小值。m次詢問,要求花費不大於g,總體積不小於l,求最大美味度,如果不能滿足,輸出 1。二分答案。然後轉變為求 前l小的果汁之和。類似任務查...