luogu4602 混合果汁 (主席树)
按照美味值从大到小排序,对于每个询问,我想二分找到一个前缀来满足条件
那么以单价为下标建主席树,维护区间的最大体积和 以及满足这个最大体积需要的价钱
然后二分答案,再在主席树上二分,找到恰好满足的那个位置(肯定是单价越小越好)
复杂度$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 混合果汁 (主席树)的更多相关文章
- BZOJ5343[Ctsc2018]混合果汁——主席树+二分答案
题目链接: CTSC2018混合果汁 显然如果美味度高的合法那么美味度低的一定合法,因为美味度低的可选方案包含美味度高的可选方案. 那么我们二分一个美味度作为答案然后考虑如何验证? 选择时显然要贪心的 ...
- LOJ 2555 「CTSC2018」混合果汁——主席树
题目:https://loj.ac/problem/2555 二分答案,在可以选的果汁中,从价格最小的开始选. 按价格排序,每次可以选的就是一个前缀.对序列建主席树,以价格为角标,维护体积和.体积*价 ...
- 洛谷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 ...
- BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树
BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树 题意:给出每个果汁的价格p,美味度d,最多能放的体积l.定义果汁混合后的美味度为果汁的美味度的最小值. m次询问,要求花费不大于g, ...
- [bzoj5343][Ctsc2018]混合果汁_二分答案_主席树
混合果汁 bzoj-5343 Ctsc-2018 题目大意:给定$n$中果汁,第$i$种果汁的美味度为$d_i$,每升价格为$p_i$,每次最多添加$l_i$升.现在要求用这$n$中果汁调配出$m$杯 ...
- BZOJ5343: [Ctsc2018]混合果汁 二分答案+主席树
分析: 整体二分或二分答案+主席树,反正没有要求强制在线,两个都可以做... 贪心还是比较显然的,那么就是找前K大的和...和CQOI的任务查询系统很像 附上代码: #include <cstd ...
- [CTSC2018]混合果汁(二分答案+主席树)
考场上写了60分的二分答案,又写了15分的主席树,然后就弃了.. 合起来就A了啊!主席树忘了开20倍空间最后还炸掉了. 最水的签到题被我扔了,主要还是不会用线段树求前缀和. 做法应该是比较显然的,首先 ...
- bzoj3207--Hash+主席树
题目大意: 给定一个n个数的序列和m个询问(n,m<=100000)和k,每个询问包含k+2个数字:l,r,b[1],b[2]...b[k],要求输出b[1]~b[k]在[l,r]中是否出现. ...
随机推荐
- E: 无法打开锁文件 /var/lib/dpkg/lock-frontend - open (13: 权限不够)E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),请查看您是否正以 root 用户运行?
一.解决方案 修改root密码,以root身份安装 sudo pwdroot root # 输入新密码即可
- linux 服务器名 访问 shh免密码登录
以根用户登录,或者登录后切换到根用户,然后在提示符下输入hostname命令,可以看出当前系统的主机名为localhost.localdomain. 更改/etc/sysconfig下的netwo ...
- mysql5.7以上安装
下载:https://dev.mysql.com/downloads/mysql/ 1.在解压的mysql下(bin目录统计),创建my.ini 文件,内容日下(路径根据自己的目录修改) [mysql ...
- getMessage(),getFile,getLine获取异常用法
try { $param = $request->all(); $param['building_id'] = 0; $param['sync'] = 2; // 1小程序2App $param ...
- bootstrap3兼容IE8
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- PLA-1
PLA(Principal Component Analysis)主成分分析: 思路1:坐标旋转 1.数据分布以及投影: 2.特征值以及特征向量 思路2: 未完待续...
- Javaweb小结之——JavaBean+持久层
数据持久层学习了JDBC.连接池以及DBUtil 思考一下,在学会使用SSM框架之前,还是先多使用DBUtil吧 数据库持久层的JDBC.连接池和DBUtil,这个链接给我了一些参考https://b ...
- Map接口----Map中嵌套Map
package cn.good.com; import java.util.HashMap; import java.util.Iterator; import java.util.Map; impo ...
- Java之指定Junit测试方法的执行顺序举例
问题描述: 大家都知道使用JUnit进行测试的时候,方法的执行顺序不是按照编写的先后顺序执行的,那么如何控制Junit的执行顺序呢? 解决方法: 在测试类上加 @FixMethodOrder 注解即可 ...
- JQuery跳出each循环的方法(包含数组遍历)
0. 前言 也许我们通过 jquery 的循环方法进行数组遍历,但是当不符合条件时,怎么跳出当前循环?(即用each方法内,当不满足条件时想break跳出循环体,想continue继续执行下一个循环遍 ...