[題目鏈結]
[演算法]
對於每組詢問 , 首先二分答案
顯然 , 最優策略為優先選擇**低的
建立可持久化線段樹 , 簡單維護即可
時間複雜度 : o(nlogn ^ 2)
[**]
#includeusingnamespace
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小的果汁之和。類似任務查...