按照美味值从大到小排序,对于每个询问,我想二分找到一个前缀来满足条件

那么以单价为下标建主席树,维护区间的最大体积和 以及满足这个最大体积需要的价钱

然后二分答案,再在主席树上二分,找到恰好满足的那个位置(肯定是单价越小越好)

复杂度$O(nlog^2n)$

 #include<bits/stdc++.h>
#define CLR(a,x) memset(a,x,sizeof(a))
#define MP make_pair
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pa;
const int maxn=1e5+,maxp=4e6+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} struct Juice{
int l,d,p;
}jui[maxn];
int N,M,rt[maxn];
int ch[maxp][],pct;
ll suml[maxp],sumv[maxp]; inline bool cmp(Juice a,Juice b){return a.d>b.d;} inline void add(int pre,int &p,int l,int r,int x,int y){
p=++pct;
suml[p]=suml[pre]+y,sumv[p]=sumv[pre]+1ll*y*x;
if(l<r){
int m=l+r>>;
if(x<=m) ch[p][]=ch[pre][],add(ch[pre][],ch[p][],l,m,x,y);
else ch[p][]=ch[pre][],add(ch[pre][],ch[p][],m+,r,x,y);
}
} inline bool judge(int p,int l,int r,ll g,ll v){
int m=l+r>>;
// printf("~%d %d\n",l,r);
if(l==r){
if(suml[p]>=v) return l*v<=g;
else return ;
}
int a=ch[p][];
if(suml[a]<v){
v-=suml[a],g-=sumv[a];
if(g<=) return ;
return judge(ch[p][],m+,r,g,v);
}else{
return judge(ch[p][],l,m,g,v);
}
} int main(){
//freopen("","r",stdin);
int i,j,k;
N=rd(),M=rd();
for(i=;i<=N;i++){
jui[i].d=rd(),jui[i].p=rd(),jui[i].l=rd();
}sort(jui+,jui+N+,cmp);
for(i=;i<=N;i++) add(rt[i-],rt[i],,1e5,jui[i].p,jui[i].l);
jui[N+].d=-;
for(i=;i<=M;i++){
ll g=rd(),v=rd();
int l=,r=N+,ans=N+;
while(l<=r){
int m=l+r>>;
if(judge(rt[m],,1e5,g,v)) ans=m,r=m-;
else l=m+;
}
printf("%d\n",jui[ans].d);
}
return ;
}

luogu4602 混合果汁 (主席树)的更多相关文章

  1. BZOJ5343[Ctsc2018]混合果汁——主席树+二分答案

    题目链接: CTSC2018混合果汁 显然如果美味度高的合法那么美味度低的一定合法,因为美味度低的可选方案包含美味度高的可选方案. 那么我们二分一个美味度作为答案然后考虑如何验证? 选择时显然要贪心的 ...

  2. LOJ 2555 「CTSC2018」混合果汁——主席树

    题目:https://loj.ac/problem/2555 二分答案,在可以选的果汁中,从价格最小的开始选. 按价格排序,每次可以选的就是一个前缀.对序列建主席树,以价格为角标,维护体积和.体积*价 ...

  3. 洛谷P4602 [CTSC2018]混合果汁(主席树)

    题目描述 小 R 热衷于做黑暗料理,尤其是混合果汁. 商店里有 nn 种果汁,编号为 0,1,\cdots,n-10,1,⋯,n−1 . ii 号果汁的美味度是 d_idi​ ,每升价格为 p_ipi ...

  4. Luogu P4062 [CTSC2018]混合果汁 (主席树)

    二分$d$, 转为判断判断是否能取到$Lj$升, 再可持久化一下就好了 #include <iostream> #include <algorithm> #include &l ...

  5. BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树

    BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树 题意:给出每个果汁的价格p,美味度d,最多能放的体积l.定义果汁混合后的美味度为果汁的美味度的最小值. m次询问,要求花费不大于g, ...

  6. [bzoj5343][Ctsc2018]混合果汁_二分答案_主席树

    混合果汁 bzoj-5343 Ctsc-2018 题目大意:给定$n$中果汁,第$i$种果汁的美味度为$d_i$,每升价格为$p_i$,每次最多添加$l_i$升.现在要求用这$n$中果汁调配出$m$杯 ...

  7. BZOJ5343: [Ctsc2018]混合果汁 二分答案+主席树

    分析: 整体二分或二分答案+主席树,反正没有要求强制在线,两个都可以做... 贪心还是比较显然的,那么就是找前K大的和...和CQOI的任务查询系统很像 附上代码: #include <cstd ...

  8. [CTSC2018]混合果汁(二分答案+主席树)

    考场上写了60分的二分答案,又写了15分的主席树,然后就弃了.. 合起来就A了啊!主席树忘了开20倍空间最后还炸掉了. 最水的签到题被我扔了,主要还是不会用线段树求前缀和. 做法应该是比较显然的,首先 ...

  9. bzoj3207--Hash+主席树

    题目大意: 给定一个n个数的序列和m个询问(n,m<=100000)和k,每个询问包含k+2个数字:l,r,b[1],b[2]...b[k],要求输出b[1]~b[k]在[l,r]中是否出现. ...

随机推荐

  1. 关于spring的源码的理解

    从最基础的Hello World开始. spring的Hello World就三行代码: public void test() { ApplicationContext context = new C ...

  2. [转帖] 百度知道: KMS 和OSPP

    https://zhidao.baidu.com/question/1819332749671662308.html Key Management Service (KMS).目前Windows Se ...

  3. PostgreSQL 安装了contrib 之后 登录失败的问题

    1. 自己之前只是安装了 pg 10.6 2. 开发同事 需要用到 一个extensions 叫做 uuid-ossp 3. 执行报错  详情见昨天的blog 4. 然后执行了升级操作 结果 pg10 ...

  4. 120. 单词接龙 (BFS)

    描述 给出两个单词(start和end)和一个字典,找到从start到end的最短转换序列 比如: 每次只能改变一个字母. 变换过程中的中间单词必须在字典中出现. 如果没有转换序列则返回0. 所有单词 ...

  5. C# Note15:设置Window图标的正确方式

    Windows Presentation Foundation(WPF)独立应用程序有两种类型的图标: 一个程序集(assembly) 图标,通过在应用程序的项目构建文件中使用<Applicat ...

  6. java回调机制——基本理解

    回调(diao):往回调用,反向调用. 英文 call back.call:调用,back:返回,往返. 回调的意思就是杀个回马枪...... 回调(callback),既然是往回调用,那自然有一个正 ...

  7. django rest framework权限和认证

    Django rest framework之权限 一.Authentication用户认证配置 1.四种验证及官网描述: BasicAuthentication 此身份验证方案使用HTTP基本身份验证 ...

  8. 解决Safari页面缓存的问题

    在开发一个移动应用的过程中,遇到问题:在订单确认页,用户点击 收货地址链接,跳转到地址选择页面,咋选一个地址,跳转回订单确认页,发现收货地址没有改变,还是最开始的地址. 用Android手机发现地址有 ...

  9. case when 空值判断

    在对数据库进行查询时,遇到了一个问题:查询结果中的某一列需要判断另一列是否为空的来确定值,自然就想到了case when,于是写出了下面的SQL(其他部分省略): (case date when nu ...

  10. 实用的几个JS新特性(es 2016)

    在Chrome 55下测试,可用. 1.箭头函数(arrow function) 以前写的匿名函数是这样的 function(){}, 现在可以简单写成这样()=>{} 如果直接return,没 ...