题意:给出每一种果汁的美味度,价格,升数;

m个询问,每个询问给出最高上限的钱g,以及给出最少的w

意思是,最多用g的钱去买最少l的果汁,问能得到的最大美味度;

美味度是取所有果汁中美味度的最小值;

所以这道题有:美味度,价格,升数,

一开始想的时候,因为多了一个条件不知道怎么操作,看了题解之后才发现,将其中的美味度拿来二分了;

也就是说,题目中的美味度取值,是二分出来的;

那么如何建树呢?

因为美味度二分,自然建树的时候是拿美味度作为主体;

也就是说,按美味度从小到大建树(小的美味度可以包括大的美味度)

然后价格作为权值,维护 花费和升数;

那么   在最后提问的时候,我们给定一个l,r; 二分他的mid;

如果他的mid二分出来的值符合,则更新;

那么   如何二分呢,我们将钱最为一个条件放入数中去深搜,如果在这个钱的范围内能找到大于等于升数的,就ans=mid,r=mid-1;

否则则反;

 #include<cstdio>
#include<algorithm>
#include<string.h>
#include<queue>
using namespace std;
typedef long long ll;
const ll maxn=1e5+;
ll sum[maxn],b[maxn],root[maxn];
struct node
{
ll d,p,l;
}G[maxn];
struct Node
{
ll ln,rn;
ll sum,val;
}tree[maxn<<]; ll cnt;
bool cmp(node a,node b)
{
return a.d>b.d;
}
void update(ll pos,ll &x,ll y,ll l,ll r,ll p,ll k)
{
tree[++cnt]=tree[y];x=cnt;
tree[x].sum+=p*k;
tree[x].val+=k;
if(l==r) return;
ll mid=l+r>>;
if(pos<=mid) update(pos,tree[x].ln,tree[y].ln,l,mid,p,k);
else update(pos,tree[x].rn,tree[y].rn,mid+,r,p,k);
}
ll query(ll root,ll l,ll r,ll limit)
{
if(l==r){
if(tree[root].val*b[l]>=limit) return limit/b[l];
else return tree[root].val;
}
ll mid=l+r>>;
ll left=tree[root].ln,right=tree[root].rn;
if(tree[left].sum>limit) return query(left,l,mid,limit);
else return tree[left].val+query(right,mid+,r,limit-tree[left].sum);
}
int main()
{
ll n,m;
scanf("%lld%lld",&n,&m);
for(ll i=;i<=n;i++){
scanf("%lld%lld%lld",&G[i].d,&G[i].p,&G[i].l);
b[i]=G[i].p;
}
sort(b+,b++n);
ll limit=unique(b+,b++n)-b-;
sort(G+,G++n,cmp);
for(ll i=;i<=n;i++){
sum[i]=sum[i-]+G[i].l;
ll pos=lower_bound(b+,b++limit,G[i].p)-b;
update(pos,root[i],root[i-],,limit,G[i].p,G[i].l);
}
while(m--){
ll g,w;
scanf("%lld%lld",&g,&w);
if(sum[n]<w){
printf("-1\n");
continue;
}
ll left=lower_bound(sum+,sum++n,w)-sum;
ll right=n,ans=-;
while(left<=right){
ll mid=left+right>>;
if(query(root[mid],,limit,g)>=w){
ans=mid;right=mid-;
}
else left=mid+;
}
if(ans==-) printf("-1\n");
else printf("%lld\n",G[ans].d);
}
return ;
}

主席树+二分 p4602的更多相关文章

  1. 2018湘潭邀请赛C题(主席树+二分)

    题目地址:https://www.icpc.camp/contests/6CP5W4knRaIRgU 比赛的时候知道这题是用主席树+二分,可是当时没有学主席树,就连有模板都不敢套,因为代码实在是太长了 ...

  2. BZOJ.1926.[SDOI2010]粟粟的书架(前缀和 主席树 二分)

    题目链接 题意: 在给定矩形区域内找出最少的数,满足和>=k.输出数的个数.两种数据范围. 0~50 注意到(真没注意到...)P[i,j]<=1000,我们可以利用前缀和预处理. num ...

  3. 计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational 南昌邀请赛网络赛)

    Distance on the tree DSM(Data Structure Master) once learned about tree when he was preparing for NO ...

  4. HDU - 4866 主席树 二分

    题意:在x轴\([1,X]\)内的上空分布有n个占据空间\([L_i,R_i]\),高度\(D_i\)的线段,射中线段的得分为其高度,每次询问从x轴的\(x\)往上空射的最近k个线段的总得分,具体得分 ...

  5. POJ 6621: K-th Closest Distance(主席树 + 二分)

    K-th Closest Distance Time Limit: 20000/15000 MS (Java/Others)    Memory Limit: 524288/524288 K (Jav ...

  6. HDU6621 K-th Closest Distance HDU2019多校训练第四场 1008(主席树+二分)

    HDU6621 K-th Closest Distance HDU2019多校训练第四场 1008(主席树+二分) 传送门:http://acm.hdu.edu.cn/showproblem.php? ...

  7. 13年山东省赛 Boring Counting(离线树状数组or主席树+二分or划分树+二分)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 2224: Boring Counting Time Limit: 3 Sec   ...

  8. BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案)

    BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案) 题意 : 给你一个长为\(R\)宽为\(C\)的矩阵,第\(i\)行\(j\)列的数为\(P_{i,j}\). 有\(m\)次 ...

  9. bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1926 题面; 1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Se ...

随机推荐

  1. [Python]python对csv去除重复行 python 2020.2.11

    用pandas库的.drop_duplicates函数 代码如下: import shutil import pandas as pd frame=pd.read_csv('E:/bdbk.csv', ...

  2. Numpy | ndarray数组基本操作

    搞不懂博客园表格的排版... 说明: 0 ndarray :多维数组对象 1 np :import numpy as np 2 nda :表示数组的名称 1 生成数组 函数名 描述 np.array ...

  3. socket编程执行远程命令实现_python

    一.单客户端连接的例子: 服务端: import socket,os,subprocess server=socket.socket() server.bind(('localhost',1234)) ...

  4. (转)spring 框架介绍

    转自:http://www.cnblogs.com/wawlian/archive/2012/11/17/2775435.html 1.Spring MVC简介 Spring MVC框架是有一个MVC ...

  5. 巨杉Tech | 使用 SequoiaDB 分布式数据库搭建JIRA流程管理系统

    介绍 JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域.很多企业与互联网公司都在使用Jira作为内部 ...

  6. mysql-sql分析策略及优化

    tranlation事务:从失败中回复到正常状态的方法多个应用并发访问数据库时,提供隔离方法 acid原子性:要么成功.要么失败一致性:数据保持“合理性”隔离型:多个事务同时并发执行,每个事务就像各自 ...

  7. window使用pycharm远程连接服务器

    1.进入pycharm, File->Settings->Deployment下: 1.新加一个Server,type为SFTP,name自定义一个,例如UI自动化项目: 2.在SFTP ...

  8. 自动构建自己的ASP.NET Core基础镜像

    在开发过程中,我们可以根据自身情况来定制自己的基础镜像,以便加快CI\CD构建速度以及提高开发体验.这里我们就以ASP.NET Core的基础镜像为例来进行讲解. 本次教程代码见开源库:https:/ ...

  9. c数据结构 -- 线性表之 顺序存储结构 于 链式存储结构 (单链表)

    线性表 定义:线性表是具有相同特性的数据元素的一个有限序列 类型: 1:顺序存储结构 定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构 算法: #include <stdio. ...

  10. 使用VSCode的Remote-SSH连接Linux进行远程开发

    安装Remote-SSH并配置 首先打开你的VSCode,找到Extensions,搜索Remote,下载Remote-Developoment插件,会自动安装其他的Remote插件,其中会包含Rem ...