按照美味值從大到小排序,對於每個詢問,我想二分找到乙個字首來滿足條件
那麼以單價為下標建主席樹,維護區間的最大體積和 以及滿足這個最大體積需要的價錢
然後二分答案,再在主席樹上二分,找到恰好滿足的那個位置(肯定是單價越小越好)
複雜度$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一...