BZOJ5343[Ctsc2018]混合果汁——主席树+二分答案
题目链接:
显然如果美味度高的合法那么美味度低的一定合法,因为美味度低的可选方案包含美味度高的可选方案。
那么我们二分一个美味度作为答案然后考虑如何验证?
选择时显然要贪心的先选单价低的果汁。
那么我们按美味度从大到小将每种果汁排序,然后对于每种果汁建立一个版本的主席树,主席树维护的权值是果汁单价。
每次验证时在对应版本主席树中查找,如果左子树中总体积大于L则递归左子树,否则将答案加上左子树所有果汁的总价然后递归右子树。
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<bitset>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
struct miku
{
int d;
ll g,l;
}s[100010];
int cnt;
int n,m,q;
ll G,L;
int ls[2000010];
int rs[2000010];
ll sum[2000010];
ll num[2000010];
int root[100010];
ll h[100010];
bool cmp(miku a,miku b)
{
if(a.d!=b.d)
{
return a.d>b.d;
}
return a.g<b.g;
}
void updata(int &rt,int pre,int l,int r,int x,ll val,ll lim)
{
rt=++cnt;
sum[rt]=sum[pre]+val;
num[rt]=num[pre]+lim;
ls[rt]=ls[pre];
rs[rt]=rs[pre];
if(l==r)
{
return ;
}
int mid=(l+r)>>1;
if(x<=mid)
{
updata(ls[rt],ls[pre],l,mid,x,val,lim);
}
else
{
updata(rs[rt],rs[pre],mid+1,r,x,val,lim);
}
}
ll query(int rt,int l,int r,ll k)
{
if(l==r)
{
return k*h[l];
}
int mid=(l+r)>>1;
if(num[ls[rt]]>=k)
{
return query(ls[rt],l,mid,k);
}
else
{
return sum[ls[rt]]+query(rs[rt],mid+1,r,k-num[ls[rt]]);
}
}
bool check(int x)
{
if(num[root[x]]<L)
{
return false;
}
if(query(root[x],1,m,L)<=G)
{
return true;
}
return false;
}
int main()
{
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
{
scanf("%d%lld%lld",&s[i].d,&s[i].g,&s[i].l);
h[i]=s[i].g;
}
sort(s+1,s+1+n,cmp);
sort(h+1,h+1+n);
m=unique(h+1,h+1+n)-h-1;
for(int i=1;i<=n;i++)
{
updata(root[i],root[i-1],1,m,lower_bound(h+1,h+1+m,s[i].g)-h,s[i].g*s[i].l,s[i].l);
}
while(q--)
{
scanf("%lld%lld",&G,&L);
int l=1;
int r=n;
int ans=-1;
while(l<=r)
{
int mid=(l+r)>>1;
if(check(mid)==true)
{
ans=mid;
r=mid-1;
}
else
{
l=mid+1;
}
}
if(ans==-1)
{
printf("-1\n");
continue;
}
printf("%d\n",s[ans].d);
}
}
BZOJ5343[Ctsc2018]混合果汁——主席树+二分答案的更多相关文章
- 2019.01.14 bzoj5343: [Ctsc2018]混合果汁(整体二分+权值线段树)
传送门 整体二分好题. 题意简述:nnn种果汁,每种有三个属性:美味度,单位体积价格,购买体积上限. 现在有mmm个询问,每次问能否混合出总体积大于某个值,总价格小于某个值的果汁,如果能,求所有方案中 ...
- BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案)
BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案) 题意 : 给你一个长为\(R\)宽为\(C\)的矩阵,第\(i\)行\(j\)列的数为\(P_{i,j}\). 有\(m\)次 ...
- 【bzoj2653】【middle】【主席树+二分答案】
Description 一个长度为 n 的序列 a ,设其排过序之后为 b ,其中位数定义为 b[n/2] ,其中 a,b 从 0 开始标号 , 除法取下整. 给你一个长度为 n 的序列 s .回答 ...
- P4094 [HEOI2016/TJOI2016]字符串 后缀数组+主席树+二分答案
$ \color{#0066ff}{ 题目描述 }$ 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一个长为n的字符串s,和m个问题.佳媛姐姐必须 ...
- BZOJ 4556 [Tjoi2016&Heoi2016]字符串 ——后缀数组 ST表 主席树 二分答案
Solution 1: 后缀数组暴力大法好 #include <map> #include <cmath> #include <queue> #include &l ...
- HDU - 6621 K-th Closest Distance 主席树+二分答案
K-th Closest Distance 主席树第二波~ 题意 给你\(n\)个数\(m\)个询问,问\(i\in [l,r]\)计算每一个\(|a_{i}-p|\)求出第\(k\)小 题目要求强制 ...
- BZOJ 2653: middle(主席树+二分答案)
传送门 解题思路 首先可以想到一种暴力做法,就是询问时二分,然后大于等于这个值的设为1,否则设为-1,然后就和GSS1那样统计答案.但是发现这样时间空间复杂度都很爆炸,所以考虑预处理,可以用主席树来做 ...
- 洛谷P4602 [CTSC2018]混合果汁(主席树)
题目描述 小 R 热衷于做黑暗料理,尤其是混合果汁. 商店里有 nn 种果汁,编号为 0,1,\cdots,n-10,1,⋯,n−1 . ii 号果汁的美味度是 d_idi ,每升价格为 p_ipi ...
- Luogu P4062 [CTSC2018]混合果汁 (主席树)
二分$d$, 转为判断判断是否能取到$Lj$升, 再可持久化一下就好了 #include <iostream> #include <algorithm> #include &l ...
随机推荐
- not annotated with HTTP method type (ex. GET, POST) 问题解决
大多数情况是真的而没有写method = RequestMethod.GET.POST等注解, 有时这么写了也报类似异常,如下 @FeignClient("microservice-prov ...
- SkylineGlobe 如何实现绘制圆形Polygon和对图层的圆形范围选择查询
//结束绘制圆形之前,得到Polygon var pos = gPolyObj.Position; var bufferR = gPolyObj.Radius; var cVerticesArray ...
- (转)Syntax error:
但是运行时总是报下面这个错,如下: test11-loop.sh: 5: Syntax error: Bad for loop variable 几经查找语法,没有问题,后来在网上找到问题原因: 代码 ...
- OI骗分神器——模拟退火算法
前言&&为什么要学模拟退火 最近一下子学了一大堆省选算法,所以搞一个愉快一点的东西来让娱乐一下 其实是为了骗到更多的分,然后证明自己的RP. 说实话模拟退火是一个集物理与IT多方面知识 ...
- OLED小记
1.点阵组成OLED,OLED中有一个GRAM区域,区域中的值直接刷新到屏幕上,对应关系是1bit对应一个像素点: 2.要点亮一个像素点,只需要将GRAM中的对应bit位写1即可.GRAM中是分页来管 ...
- ubuntu12.04安装squid
一:简介 1.Squid:优化Web交付 Squid是支持HTTP,HTTPS,FTP等的Web的缓存代理.它通过缓存和重用经常请求的网页来减少带宽并缩短响应时间.Squid拥有广泛的访问控制,是一个 ...
- Socket入门笔记 用TcpClient实现一个简易聊天室
效果 实现思路 使用TcpListener建一个服务器,接收所有客户端发送的消息,然后由服务器再发送到其他客户端 客户端使用TcpClient,发消息给服务器,接收服务器的消息,不和其他客户端直接交互 ...
- 2018年高教社杯全国大学生数学建模竞赛B题解题思路
题目 先贴下B题的题目吧 问题B 智能RGV的动态调度策略 图1是一个智能加工系统的示意图,由8台计算机数控机床(Computer Number Controller,CNC).1辆轨道式自动引 ...
- python基础学习笔记(二)
继续第一篇的内容,讲解,python的一些基本的东西. 注释 为了让别人能够更容易理解程序,使用注释是非常有效的,即使是自己回头再看旧代码也是一样. >>> #获得用户名: > ...
- 12.8 Daily Scrum
最近大家都比较忙,任务今天也才刚刚分配,所以具体的编码任务从明天开始. Tomorrow's Task 丁辛 完善餐厅列表,显示距离. 邓亚梅 美化搜索框 ...