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

题意:给出每个果汁的价格p,美味度d,最多能放的体积l。定义果汁混合后的美味度为果汁的美味度的最小值。

m次询问,要求花费不大于g,总体积不小于L,求最大美味度,如果不能满足,输出-1。


二分答案。然后转变为求价格前L小的果汁之和。

类似任务查询系统那道题。

权值线段树维护结点总体积和全部购买的总花费。

按美味度建立主席树即可。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
#define N 100050
#define inf 100000
struct J {
int d,p,l;
bool operator < (const J &x) const {
return d<x.d;
}
}a[N];
int n,root[N],ls[N*20],rs[N*20],m,cnt;
ll siz[N*20],cost[N*20],s[N];
void insert(int l,int r,int idx,int x,int &y) {
y=++cnt; siz[y]=siz[x]+a[idx].l; cost[y]=cost[x]+1ll*a[idx].l*a[idx].p;
if(l==r) return ;
int mid=(l+r)>>1;
if(a[idx].p<=mid) rs[y]=rs[x],insert(l,mid,idx,ls[x],ls[y]);
else ls[y]=ls[x],insert(mid+1,r,idx,rs[x],rs[y]);
}
ll query(int l,int r,ll c,int x,int y) {
if(l==r) return c*l;
int mid=(l+r)>>1;
ll sizls=siz[ls[y]]-siz[ls[x]];
if(sizls>=c) return query(l,mid,c,ls[x],ls[y]);
else return query(mid+1,r,c-sizls,rs[x],rs[y])+cost[ls[y]]-cost[ls[x]];
}
bool check(int x,ll need,ll val) {
if(s[n]-s[x-1]<need) return 0;
return query(1,inf,need,root[x-1],root[n])<=val;
}
int main() {
scanf("%d%d",&n,&m);
int i;
for(i=1;i<=n;i++) scanf("%d%d%d",&a[i].d,&a[i].p,&a[i].l);
sort(a+1,a+n+1);
for(i=1;i<=n;i++) insert(1,inf,i,root[i-1],root[i]),s[i]=s[i-1]+a[i].l;
ll x,y;
while(m--) {
scanf("%lld%lld",&x,&y);
int l=1,r=n+1;
while(l<r) {
int mid=(l+r)>>1;
if(check(mid,y,x)) l=mid+1;
else r=mid;
}
printf("%d\n",l-1?a[l-1].d:-1);
}
}

最新文章

  1. DB2重启数据库实例
  2. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q144-Q146)
  3. 【转】MarshalAs属性和使用
  4. Struts2 Convention插件的使用(3)方法前的@Action注解
  5. Linux C 程序 字符串函数(12)
  6. ext 扩展控件—moneyField
  7. linux服务器上的php代码通过nginx发布,解决pathinfo模式问题
  8. 工厂模式Assembly.Load(path).CreateInstance 反射出错解决办法
  9. MySQL两个最简单的delimiter的使用demo
  10. NetBeans部署项目(Extjs)报错(一)
  11. .net OADate 转javascript的Datetime js 5位 日期 转换
  12. [DP][NOIP2013]花匠
  13. Scala - 快速学习02 - 搭建开发环境
  14. centos nginx 中安装ssl证书 以及在项目中的使用
  15. arguments.callee 和 caller
  16. Data De-duplication
  17. maven3常用命令、java项目搭建、web项目搭建
  18. 分布式理论系列(三)ZAB 协议
  19. Alpha 冲刺(4/10)
  20. Python并发编程-SocketServer多线程版

热门文章

  1. F5 TCP Traffic Flow v0.5
  2. 七牛云赵之健:多维度融合赋能视频 AI 的实践
  3. 前端接收到的json的属性的首字母会自动变成小写,解决办法如下
  4. Git学习之常见错误 clone被拒绝
  5. python学习之-- redis模块管道/订阅发布
  6. delightful world--计蒜客(DFS)
  7. 洛谷—— P1714 切蛋糕
  8. 某考试 T1 table
  9. mysql 统计数据,按照日期分组,把没有数据的日期也展示出来
  10. idea2019设置智能提示忽略大小写