题目链接:

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);}
}

转载于:https://www.cnblogs.com/Khada-Jhin/p/10028956.html

BZOJ5343[Ctsc2018]混合果汁——主席树+二分答案相关推荐

  1. HDU4417 Super Mario(离线树状数组或者主席树+二分)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

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

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

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

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

  4. K-th Closest Distance HDU - 6621(第k小绝对值+主席树+二分)

    You have an array: a1, a2, , an and you must answer for some queries. For each query, you are given ...

  5. Cutting Bamboos(牛客多校第九场H主席树+二分+思维)

    链接:https://ac.nowcoder.com/acm/contest/889/H 来源:牛客网 There are n bamboos arranged in a line. The i-th ...

  6. [HEOI2016/TJOI2016]字符串 (后缀数组+主席树+二分)

    description 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一个长为 n 的字符串 s,和 m 个问题.佳媛姐姐必须正确回答这 m 个问 ...

  7. [2020.11.26NOIP模拟赛]勇者的后缀【SA,RMQ,主席树,二分】

    正题 题目链接:https://www.luogu.com.cn/problem/U142356?contestId=37784 题目大意 一个字符串,询问给出(x,l,r)(x,l,r)(x,l,r ...

  8. P2839-[国家集训队]middle【主席树,二分】

    正题 题目链接:https://www.luogu.com.cn/problem/P2839 题目大意 nnn个数字,mmm次询问给出(a,b,c,d)(a,b,c,d)(a,b,c,d)表示左端点在 ...

  9. 牛客网 Cutting Bamboos 【主席树+二分】

    题意:给你n棵树,每棵树的高度是Hi,q次询问相互独立,每次询问{ l, r, x, y }, 就是在区间[l, r] 里的树需要y次全部砍完,每次砍可以选择一个高度,高于的地方全部砍掉,且要求每次砍 ...

最新文章

  1. ATEN—第十章OSPF的高级配置(4)
  2. Activity如何后台运行?不是缓存,是运行。
  3. Python基础教程— Struct模块
  4. TRY NOT TO SAY SO MUCH!
  5. 《精通正则表达式》笔记
  6. 编写干净的测试–天堂中的麻烦
  7. 相约11月25日,开发者的嘉年华
  8. html5 如何设置导航,HTML5导航标签正确用法
  9. 中兴通讯推出全球首款Wi-Fi 7标准5G CPE
  10. python查看系统信息_学习python获取系统信息和磁盘容量
  11. java的map的方法_Java中Map集合(接口)的基本方法程序演示
  12. steam当前计算机无法,steam无法打开【操作思路】
  13. redis如何解决远程连接失败
  14. KMS知识文档管理系统如何与BPM流程管理相结合
  15. meanshift聚类算法跟踪原理
  16. windows10卸载程序_如何在Windows 10中卸载或修复程序
  17. Sumatra PDF软件基本使用和快捷键
  18. 负雪明烛开通公众号啦~ 欢迎关注「负雪明烛」
  19. 计算机课件文字,计算机应用基础_文字处理wordppt课件.ppt
  20. 过年烟花特效+鼠标滑过+樱花特效

热门文章

  1. 使用 ‘In Place’ 直接从MySQL 5.0升级至5.7
  2. 【算法】2 由股票收益问题再看分治算法和递归式
  3. 速修复!NSA 报告四个严重和高危 Exchange Server RCE 漏洞
  4. Django restframework 嵌套关系处理
  5. K8S认证、授权与准入控制(RBAC)详解
  6. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)
  7. 『总结』CSS/CSS3常用样式与web移动端资源
  8. C++程序员Protocol Buffers基础指南
  9. 【资料整理】Eclipse快捷键
  10. Java删除ArrayList中的重复元素的2种方法