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

BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树的更多相关文章

  1. [bzoj5343][Ctsc2018]混合果汁_二分答案_主席树

    混合果汁 bzoj-5343 Ctsc-2018 题目大意:给定$n$中果汁,第$i$种果汁的美味度为$d_i$,每升价格为$p_i$,每次最多添加$l_i$升.现在要求用这$n$中果汁调配出$m$杯 ...

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

    分析: 整体二分或二分答案+主席树,反正没有要求强制在线,两个都可以做... 贪心还是比较显然的,那么就是找前K大的和...和CQOI的任务查询系统很像 附上代码: #include <cstd ...

  3. 2019杭电多校第四场hdu6621 K-th Closest Distance(二分答案+主席树)

    K-th Closest Distance 题目传送门 解题思路 二分答案+主席树 先建主席树,然后二分答案mid,在l和r的区间内查询[p-mid, p+mid]的范围内的数的个数,如果大于k则说明 ...

  4. [CTSC2018]混合果汁(二分答案+主席树)

    考场上写了60分的二分答案,又写了15分的主席树,然后就弃了.. 合起来就A了啊!主席树忘了开20倍空间最后还炸掉了. 最水的签到题被我扔了,主要还是不会用线段树求前缀和. 做法应该是比较显然的,首先 ...

  5. BZOJ4556 [Tjoi2016&Heoi2016]字符串 SA ST表 二分答案 主席树

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4556.html 题目传送门 - BZOJ4556 题意 给定一个长度为 $n$ 的字符串 $s$ . ...

  6. BZOJ1926[Sdoi2010]粟粟的书架——二分答案+主席树

    题目描述 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co rmen 的文章.粟粟家中有一个 R行C 列的巨型书架,书架的每一个位 ...

  7. Codeforces Round #276 (Div. 1) E. Sign on Fence (二分答案 主席树 区间合并)

    链接:http://codeforces.com/contest/484/problem/E 题意: 给你n个数的,每个数代表高度: 再给出m个询问,每次询问[l,r]区间内连续w个数的最大的最小值: ...

  8. BZOJ 4556: [Tjoi2016&Heoi2016]字符串(后缀数组 + 二分答案 + 主席树 + ST表 or 后缀数组 + 暴力)

    题意 一个长为 \(n\) 的字符串 \(s\),和 \(m\) 个询问.每次询问有 \(4\) 个参数分别为 \(a,b,c,d\). 要你告诉它 \(s[a...b]\) 中的所有子串 和 \(s ...

  9. BZOJ2653 middle(二分答案+主席树)

    与中位数有关的题二分答案是很常用的trick.二分答案之后,将所有大于它的看成1小于它的看成-1,那么只需要判断是否存在满足要求的一段和不小于0. 由于每个位置是1还是-1并不固定,似乎不是很好算.考 ...

随机推荐

  1. java常见问题集锦

    Eclipse 编译错误 Access restriction:The type *** is not accessible due to restriction on... 解决方案 Eclipse ...

  2. Android: java.lang.ClassCastException: android.widget.imageView cannot be cast to android.widget.textView异常解决

    有时在修改xml文件时,全报这种错误,这个应该是缓存没得到及时更新导致的,可以通过以下方法解决: Eclipse tends to mess up your resources every now a ...

  3. 2016 Multi-University Training Contest 9 solutions BY 金策工业综合大学

    A Poor King Tag: Reversed BFS Preprocessing is needed to calculate answers for all positions (states ...

  4. 【HDOJ6342】Expression in Memories(模拟)

    题意: 给定一个由0123456789+* ?组成的表达式,其中?可以被改为任意其它字符,问修改问号后是否有方案使得表达式合法 len<=5e2,sumlen<=1e5 思路: #incl ...

  5. BZOJ1775: [Usaco2009 Dec]Vidgame 电视游戏问题

    n<=50个游戏机有花费,每个游戏机有Gi<=10种游戏,每种游戏有花费有收益,买了游戏机才能玩对应游戏,求最大收益. 这就是一个背包!不过有依存关系,就不会了! 方法一:f[i][j]表 ...

  6. python(4)- 字符编码

    一 什么是编码? 基本概念很简单.首先,我们从一段信息即消息说起,消息以人类可以理解.易懂的表示存在.我打算将这种表示称为“明文”(plain text).对于说英语的人,纸张上打印的或屏幕上显示的英 ...

  7. django学习之- 信号

    - Django内置的信号Model signals pre_init # django的modal执行其构造方法前,自动触发 post_init # django的modal执行其构造方法后,自动触 ...

  8. BZOJ 3884 拓展欧拉定理

    3884: 上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4142  Solved: 1907[Submit][Status][D ...

  9. Edit Distance(动态规划,难)

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...

  10. 2018.11.3 PION模拟赛

    期望:100    实际:100 #include<cstdio> #include<cstring> #include<iostream> #include< ...