BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树
2024-09-05 04:08:25
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);
}
}
最新文章
- DB2重启数据库实例
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q144-Q146)
- 【转】MarshalAs属性和使用
- Struts2 Convention插件的使用(3)方法前的@Action注解
- Linux C 程序 字符串函数(12)
- ext 扩展控件—moneyField
- linux服务器上的php代码通过nginx发布,解决pathinfo模式问题
- 工厂模式Assembly.Load(path).CreateInstance 反射出错解决办法
- MySQL两个最简单的delimiter的使用demo
- NetBeans部署项目(Extjs)报错(一)
- .net OADate 转javascript的Datetime js 5位 日期 转换
- [DP][NOIP2013]花匠
- Scala - 快速学习02 - 搭建开发环境
- centos nginx 中安装ssl证书 以及在项目中的使用
- arguments.callee 和 caller
- Data De-duplication
- maven3常用命令、java项目搭建、web项目搭建
- 分布式理论系列(三)ZAB 协议
- Alpha 冲刺(4/10)
- Python并发编程-SocketServer多线程版