luogu4602 混合果汁 主席樹

2022-04-29 21:03:10 字數 1285 閱讀 5162

按照美味值從大到小排序,對於每個詢問,我想二分找到乙個字首來滿足條件

那麼以單價為下標建主席樹,維護區間的最大體積和 以及滿足這個最大體積需要的價錢

然後二分答案,再在主席樹上二分,找到恰好滿足的那個位置(肯定是單價越小越好)

複雜度$o(nlog^2n)$

1 #include2

#define clr(a,x) memset(a,x,sizeof(a))

3#define mp make_pair

4using

namespace

std;

5 typedef long

long

ll;6 typedef unsigned long

long

ull;

7 typedef pairpa;

8const

int maxn=1e5+10,maxp=4e6+10;9

10inline ll rd()

13while(c>='

0'&&c<='

9') x=x*10+c-'

0',c=getchar();

14return x*neg;15}

1617

struct

juicejui[maxn];

20int

n,m,rt[maxn];

21int ch[maxp][2

],pct;

22ll suml[maxp],sumv[maxp];

2324 inline bool cmp(juice a,juice b)

2526 inline void add(int pre,int &p,int l,int r,int x,int

y)34}35

36 inline bool judge(int p,int l,int

r,ll g,ll v)

43int a=ch[p][0

];44

if(suml[a]5253

intmain()sort(jui+1,jui+n+1

,cmp);

60for(i=1;i<=n;i++) add(rt[i-1],rt[i],1

,1e5,jui[i].p,jui[i].l);

61 jui[n+1].d=-1;62

for(i=1;i<=m;i++)

70 printf("

%d\n

",jui[ans].d);71}

72return0;

73 }

洛谷P4602 CTSC2018 混合果汁

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

洛谷P4602 CTSC2018 混合果汁

小 r 熱衷於做黑暗料理,尤其是混合果汁。商店裡有 n 種果汁,編號為 0,1,2,n 1。i 號果汁的美味度是 di,每公升 為 pi。小 r 在製作混合果汁時,還有一些特殊的規定,即在一瓶混合果汁中,i 號果汁最 多只能新增 li 公升。現在有 m 個小朋友過來找小 r 要混合果汁喝,他們都希望...

CTSC2018 混合果汁

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