Luogu P4602 [CTSC2018]混合果汁
题目
把果汁按美味度降序排序,以单价为下标插入主席树,记录每个节点的\(sum\)果汁升数和\(val\)果汁总价。
每次询问二分最小美味度,查询美味度大于等于\(mid\)的总体积为\(L\)的最低总价。
#include<bits/stdc++.h>
#define LL long long
using namespace std;
namespace IO
{
char ibuf[(1<<21)+1],obuf[(1<<21)+1],st[20],*iS,*iT,*oS=obuf,*oT=obuf+(1<<21);
char Get(){return (iS==iT? (iT=(iS=ibuf)+fread(ibuf,1,(1<<21)+1,stdin),(iS==iT? EOF:*iS++)):*iS++);}
void Flush(){fwrite(obuf,1,oS-obuf,stdout),oS=obuf;}
void Put(char x){*oS++=x;if(oS==oT)Flush();}
LL read(){LL x=0;char ch=Get();while(ch>57||ch<48)ch=Get();while(ch>=48&&ch<=57)x=x*10+(ch^48),ch=Get();return x;}
void write(int x){int top=0;if(x<0)Put('-'),x=-x;if(!x)Put('0');while(x)st[++top]=(x%10)+48,x/=10;while(top)Put(st[top--]);Put('\n');}
}
using namespace IO;
#define N 100007
#define K 100000
struct node{int d,p,l;}a[N];
int operator<(node a,node b){return a.d<b.d;}
int root[N],ls[N<<5],rs[N<<5],cnt;
LL sum[N<<5],val[N<<5];
#define mid ((l+r)>>1)
void insert(int &p,int l,int r,int x,int s,LL v)
{
ls[++cnt]=ls[p],rs[cnt]=rs[p],val[cnt]=val[p]+v,sum[cnt]=sum[p]+s,p=cnt;
if(l==r) return ;
x<=mid? insert(ls[p],l,mid,x,s,v):insert(rs[p],mid+1,r,x,s,v);
}
LL query(int p,int l,int r,LL s)
{
if(l==r) return s*l;
return s<=sum[ls[p]]? query(ls[p],l,mid,s):(val[ls[p]]+query(rs[p],mid+1,r,s-sum[ls[p]]));
}
int solve()
{
LL g=read(),L=read();int l=0,r=K,ans=0;
if(L>g) return -1;
while(l<=r) (L<=sum[root[mid]]&&query(root[mid],0,K,L)<=g)? (ans=mid,l=mid+1):(r=mid-1);
return a[ans].d;
}
int main()
{
int n=read(),m=read(),i;
for(a[0].d=-1,i=1;i<=n;++i) a[i].d=read(),a[i].p=read(),a[i].l=read();
for(sort(a+1,a+n+1),i=n;i;--i) insert(root[i]=root[i+1],0,K,a[i].p,a[i].l,1ll*a[i].p*a[i].l);
root[0]=root[1];
while(m--) write(solve());
return Flush(),0;
}
Luogu P4602 [CTSC2018]混合果汁的更多相关文章
- 洛谷P4602 [CTSC2018]混合果汁(主席树)
题目描述 小 R 热衷于做黑暗料理,尤其是混合果汁. 商店里有 nn 种果汁,编号为 0,1,\cdots,n-10,1,⋯,n−1 . ii 号果汁的美味度是 d_idi ,每升价格为 p_ipi ...
- [洛谷P4602] CTSC2018 混合果汁
问题描述 小 R 热衷于做黑暗料理,尤其是混合果汁. 商店里有 n 种果汁,编号为 0, 1, 2, . . . , n − 1.i 号果汁的美味度是 di,每升价格为 pi.小 R 在制作混合果汁时 ...
- LOJ 2555 & 洛谷 P4602 [CTSC2018]混合果汁(二分+主席树)
LOJ 题目链接 & 洛谷题目链接 题意:商店里有 \(n\) 杯果汁,第 \(i\) 杯果汁有美味度 \(d_i\),单价为 \(p_i\) 元/升.最多可以添加 \(l_i\) 升.有 \ ...
- Luogu P4062 [CTSC2018]混合果汁 (主席树)
二分$d$, 转为判断判断是否能取到$Lj$升, 再可持久化一下就好了 #include <iostream> #include <algorithm> #include &l ...
- Luogu 4602 [CTSC2018]混合果汁
BZOJ 5343 福利题. 对于每一个询问可以二分$d$,然后把满足条件的果汁按照$p$从小到大排序贪心地取$L$升看看满不满足价格的条件. 那么按照$p$建立权值主席树,$chk$的时候在主席树上 ...
- BZOJ5343[Ctsc2018]混合果汁——主席树+二分答案
题目链接: CTSC2018混合果汁 显然如果美味度高的合法那么美味度低的一定合法,因为美味度低的可选方案包含美味度高的可选方案. 那么我们二分一个美味度作为答案然后考虑如何验证? 选择时显然要贪心的 ...
- [Bzoj]5343: [Ctsc2018]混合果汁
5343: [Ctsc2018]混合果汁 题目描述 小 R 热衷于做黑暗料理,尤其是混合果汁. 商店里有 \(n\) 种果汁,编号为 \(0,1,\cdots,n-1\) .\(i\) 号果汁的美味度 ...
- BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树
BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树 题意:给出每个果汁的价格p,美味度d,最多能放的体积l.定义果汁混合后的美味度为果汁的美味度的最小值. m次询问,要求花费不大于g, ...
- 题解 洛谷 P4602 【[CTSC2018]混合果汁】
注意到问题具有单调性,所以一个询问可以通过二分答案来解决. 对于多组询问,就采用整体二分来处理. 将果汁按\(d\)从大到小排序,二分出一个位置\(mid\),只考虑在位置\(mid\)之前的果汁,其 ...
随机推荐
- python from…import* 语句
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明: from modname import * 这提供了一个简单的方法来导入一个模块中的所有项目.然而这种声明不该被过多地使用. ...
- JS实现深拷贝的几种方法
引 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力. 此篇文章中也会简单阐述到栈 ...
- sh_01_列表基本使用
sh_01_列表基本使用 name_list = ["zhangsan", "lisi", "wangwu"] # 1. 取值和取索引 # ...
- python3基础: 元组tuple、 列表list、 字典dict、集合set。 迭代器、生成器
一.元组: tuple Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组 tup2 = (111, 22, 33, ...
- Postman(一)、断言
postman常见断言方法介绍: 1.Clear a global variable (清除一个全局变量) postman.clearGlobalVariable("variable_ke ...
- sleep() 、join()、yield()有什么区别
1sleep()方法 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行).此操作受到系统计时器和调度程序精准和准确性的影响,让其他线程有机会继续执行,但是它不释放对象锁.也就是如果有synchron ...
- java 调用腾讯云短信api
依赖: <!--腾讯短信依赖--> <dependency> <groupId>com.github.qcloudsms</groupId> <a ...
- 2018-2019-2 20175215 实验一《Java开发环境的熟悉》实验报告
一.实验内容及步骤 1.使用JDK编译.运行简单的Java程序 cd code进入code文件夹 mkdir 20175215exp1创建20175215exp1文件夹 ls查看当前目录 cd 201 ...
- python3笔记四:if语句
一:学习内容 if语句 if-else语句 if-elif-else语句 if语句练习 二:if语句 1. 格式 if 表达式: 语句 2.逻辑 当程序执行到if语句时,首先计算表达式的值如果表 ...
- js 函数定义的方式
js 函数定义的方式 一.总结 一句话总结: 最常见就下面三种 最常见:function func1([参数]){/*函数体*/} 将匿名函数赋值给变量:var func2=function([参数] ...