题意:
n种果汁,第iii种果汁的美味程度是did_idi​有lil_ili​​升,价格是pip_ipi​升
mmm个询问,要求使用果汁的总量不小于LimLimLim,价格不超过GGG,最大化所用的果汁的美味程度最小值
思路:
大体思路:
首先二分出来一个taste,然后在比taste高的里面去找一些价格少的,且能凑到L升的果汁,检查是否能凑出。
我们发现题目询问很多次,那么我们对于每一次的询问二分,在二分检查时肯定不可以O(n)去检查,因为这样时间复杂度就变成了O(m∗n∗logn)O(m*n*logn)O(m∗n∗logn)了,我么利用主席树。

首先把按照tastetastetaste排序,二分一个答案tastetastetaste,那么我们肯定是贪心地选择美味程度不小于tastetastetaste的并且最便宜的果汁
可以发现其具有单调性,考虑二分一个tastetastetaste给美味程度不小于tastetastetaste的果汁建立一颗以价格为下标的线段树
每个节点记录一下果汁总量和价格和,这样就可以在线段树上二分得到LLL对应的价格了
代码:

#include<bits/stdc++.h>
//#define int long long
#define endl '\n'
using namespace std;const int maxn=1e5+10;struct E{int taste,price,v;bool operator <(const E & a)const{return taste<a.taste;}
}a[maxn];int n,m,cnt;
int rt[maxn];
long long treecost[maxn*50],treesum[maxn*50];
int ls[maxn*50],rs[maxn*50];void updata(int &node,int start,int ends,int lst,long long pos,long long val){  //val 多少升node=++cnt;ls[node]=ls[lst];rs[node]=rs[lst];treecost[node]=treecost[lst]+pos*val;treesum[node]=treesum[lst]+val;if(start==ends) return ;int mid=(start+ends)>>1;if(pos<=mid) updata(ls[node],start,mid,ls[lst],pos,val);else updata(rs[node],mid+1,ends,rs[lst],pos,val);
}long long sumnow;//sum 表示的是容积bool query(int start,int ends,int x,int y,long long rem){if(treesum[y]-treesum[x]<rem) return false;if(start==ends){sumnow+=rem*start;return true;}int mid=(start+ends)>>1;long long lsum=treesum[ls[y]]-treesum[ls[x]];if(lsum>=rem){return query(start,mid,ls[x],ls[y],rem);}else{sumnow+=treecost[ls[y]]-treecost[ls[x]];return query(mid+1,ends,rs[x],rs[y],rem-lsum);}
}int imax=1;
bool che(int x,long long cost,long long tot){sumnow=0;if(query(1,imax,rt[x-1],rt[n],tot)==false) return false;return sumnow<=cost;}signed main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i].taste>>a[i].price>>a[i].v;imax=max(imax,a[i].price);}sort(a+1,a+1+n);for(int i=1;i<=n;i++){updata(rt[i],1,imax,rt[i-1],a[i].price,a[i].v);}for(int i=1;i<=m;i++){long long pric,L;cin>>pric>>L;int l=1,r=n,ans=-1;while(l<=r){int mid=(l+r)>>1;if(che(mid,pric,L)){ans=a[mid].taste;l=mid+1;}else r=mid-1;}cout<<ans<<endl;}}

[CTSC2018]混合果汁 二分 套 主席树上二分相关推荐

  1. P2839 [国家集训队]middle(二分 套 主席树)

    P2839 [国家集训队]middle 有一个长度为nnn的序列,有mmm次询问,每次询问a,b,c,da, b, c, da,b,c,d,为l∈[a,b],r∈[c,d]l \in [a, b], ...

  2. H - Hello Ms. Ze(树状数组套主席树,线段树上二分)

    H - Hello Ms. Ze 给定nnn种不同的材料,第iii种材料有aia_iai​个,有mmm个操作,操作分为两类: 把第xxx种材料修改为yyy个, 只用[l,r][l, r][l,r]区间 ...

  3. BZOJ5343[Ctsc2018]混合果汁——主席树+二分答案

    题目链接: CTSC2018混合果汁 显然如果美味度高的合法那么美味度低的一定合法,因为美味度低的可选方案包含美味度高的可选方案. 那么我们二分一个美味度作为答案然后考虑如何验证? 选择时显然要贪心的 ...

  4. BZOJ5343 [Ctsc2018]混合果汁 【二分 + 主席树】

    题目链接 BZOJ5343 题解 明显要二分一下美味度,然后用尽量少的价格去购买饮料,看看能否买到\(L\)升,然后看看能否控制价格在\(g\)内 尽量少的价格,就优先先选完便宜的饮料,由于询问的是一 ...

  5. P4602 [CTSC2018]混合果汁(主席树)

    P4602 [CTSC2018]混合果汁 共有nnn种果汁,第iii种果汁的美味度为did_idi​,每升价格为pip_ipi​,在一瓶混合果汁中,最多只能添加lil_ili​升. 有mmm个询问,每 ...

  6. Just h-index(主席树+二分)

    链接:https://ac.nowcoder.com/acm/contest/1107/C 来源:牛客网 找一段区间内,大于等于这个数的个数大于等于这个数本身,问符合条件的最大值是多少. 思路:把数据 ...

  7. [NOIP2015模拟10.27] [JZOJ4270] 魔道研究 解题报告(动态开点+权值线段树上二分)

    Description "我希望能使用更多的魔法.不对,是预定能使用啦.最终我要被大家称呼为大魔法使.为此我决定不惜一切努力." --<The Grimoire of Mar ...

  8. 洛谷 P2468 粟粟的书架 二分(主席树+前缀和)

    传送~:https://www.luogu.org/problem/P2468 看了一下数据也发现是两道题,后边当他是一个序列(n==1)的时候直接主席树二分区间前k大和就行了 但是有一个细节我觉得就 ...

  9. BZOJ3473:字符串(后缀数组,主席树,二分,ST表)

    Description 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串? Input 第一行两个整数n,k. 接下来n行每行一个字符串. Output 一 ...

最新文章

  1. oracle sql 全是子查询查询速度太慢如何优化_如果面试官问你如何优化mysql分页查询,请把这篇文章甩给他!...
  2. 选择排序 C++代码实现及性能分析 恋上数据结构笔记
  3. 滨州行谋定乡音叙乡情-农业大健康·万祥军:考察特色产业
  4. lass翻译_【专题讲座】政务翻译人才培训系列讲座(1)
  5. 修改date格式 java_如何用Java更改日期格式?
  6. 这个世界是怎么了?做商业软件的怎么越来越流氓了?
  7. MyBatis(七)------MyBatis映射器(resultMap元素)
  8. [JVM] Java虚拟机栈
  9. 如何正确使用条码标签打印软件
  10. 什么算法计算地图上从A点到B点的方向?
  11. CVPR 2022 | AAAI2022 | WACV 2022 超分辨率(super-resolution)方向上接收论文总结
  12. 淘宝关键词API接口
  13. ntp校时器(网络对时服务器)自动化系统技术应用方案
  14. oracle+sql+按中文拼音排序,Oracle 中文字段进行排序的sql语句
  15. STL:: allocator之deallocate destory的区别与联系
  16. SteamVR 2.x 手柄触摸3D物体(11)
  17. VSCode更新失败无法打开,快捷方式无法正常工作
  18. 机器学习_吴恩达-总
  19. python echo含义_echo什么意思
  20. vue 启动项目时动态切换 ip

热门文章

  1. 如何入门论文阅读综述小解答
  2. 风云榜查询名次 接单者与公司对应的数据库语句
  3. Python基础学习!容器:列表,元组,字典与集合!(1)
  4. 基于OpencvCV的情绪检测
  5. 深度学习实现缺陷检测
  6. 干货 | OpenCV中KLT光流跟踪原理详解与代码演示
  7. 深度神经网络是否过拟合?
  8. 位操作-按位与之如何求二进制数的1个数
  9. 青桔单车 chameleon 跨平台实践
  10. 部署 YApi 接口管理服务