考场上写了60分的二分答案,又写了15分的主席树,然后就弃了。。

合起来就A了啊!主席树忘了开20倍空间最后还炸掉了。

最水的签到题被我扔了,主要还是不会用线段树求前缀和。

做法应该是比较显然的,首先肯定要二分答案,然后需要查询的就是大于等于当前二分值的最便宜的L个饮料的总花费是否不超过g,这个直接上主席树就好。

 #include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
typedef long long ll;
using namespace std; const int N=,M=,Mx=;
struct P{ int d,p,l; }a[N];
bool cmp(const P &a,const P &b){ return a.d<b.d; }
int n,m,nd,tot,b[N],ls[M],rs[M],root[N];
ll g,q,c[N],sz[M],sm[M]; void ins(int y,int &x,int L,int R,int pos,int k){
x=++nd; ls[x]=ls[y]; rs[x]=rs[y]; sz[x]=sz[y]; sm[x]=sm[y];
if (L==R){ sz[x]+=k; sm[x]+=1ll*L*k; return; }
int mid=(L+R)>>;
if (pos<=mid) ins(ls[y],ls[x],L,mid,pos,k);
else ins(rs[y],rs[x],mid+,R,pos,k);
sz[x]=sz[ls[x]]+sz[rs[x]]; sm[x]=sm[ls[x]]+sm[rs[x]];
} ll que(int x,int L,int R,ll pos){
if (L==R) return L*pos;
int mid=(L+R)>>;
if (sz[ls[x]]>=pos) return que(ls[x],L,mid,pos);
else return sm[ls[x]]+que(rs[x],mid+,R,pos-sz[ls[x]]);
} bool jud(int mid){
if (c[tot]-c[mid-]<q) return ;
return que(root[mid],,Mx,q)<=g;
} int main(){
freopen("juice.in","r",stdin);
freopen("juice.out","w",stdout);
scanf("%d%d",&n,&m);
rep(i,,n) scanf("%d%d%d",&a[i].d,&a[i].p,&a[i].l),b[++tot]=a[i].d;
sort(b+,b+tot+); tot=unique(b+,b+tot+)-b-; b[]=-;
rep(i,,n) a[i].d=lower_bound(b+,b+tot+,a[i].d)-b,c[a[i].d]+=a[i].l;
rep(i,,tot) c[i]+=c[i-];
sort(a+,a+n+,cmp); int j=n;
for (int i=tot; i; i--){
root[i]=root[i+];
for (; j && a[j].d>=i; j--) ins(root[i],root[i],,Mx,a[j].p,a[j].l);
}
rep(i,,m){
scanf("%lld%lld",&g,&q);
int l=,r=tot,ans=;
while (l<=r){
int mid=(l+r)>>;
if (jud(mid)) ans=mid,l=mid+; else r=mid-;
}
printf("%d\n",b[ans]);
}
return ;
}

[CTSC2018]混合果汁(二分答案+主席树)的更多相关文章

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

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

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

    BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树 题意:给出每个果汁的价格p,美味度d,最多能放的体积l.定义果汁混合后的美味度为果汁的美味度的最小值. m次询问,要求花费不大于g, ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. BZOJ3277 串(后缀数组+二分答案+主席树)

    因为不会SAM,考虑SA.将所有串连起来并加分隔符,每次考虑计算以某个位置开始的子串有多少个合法. 对此首先二分答案,找到名次数组上的一个区间,那么只需要统计有多少个所给串在该区间内出现就可以了.这是 ...

随机推荐

  1. BZOJ 3629 JLOI2014 聪明的燕姿 约数和+DFS

    根据约数和公式来拆s,最后再把答案乘出来,我们发先这样的话递归层数不会太大每层枚举次数也不会太多,然而我们再来个剪枝就好了 #include<cstdio> #include<ios ...

  2. Out of memory due to hash maps used in map-side aggregation解决办法

    在运行一个group by的sql时,抛出以下错误信息: Task with the most failures(4): -----Task ID:  task_201411191723_723592 ...

  3. scrapy新版本特性

    1:在spider中返回一个自定义的字典,老版本中需要先定义一个Item,填充后再返回一个对象 新版本中可以直接返回一个字典 2:Per-spider settings  为每个spider进行单独设 ...

  4. JS遮罩层弹框效果

    对于前端开发者来说,js是不可缺少的语言.现在我开始把我日常积累的一些js效果或者通过搜索自己总结的一些效果分享给大家,希望能够帮助大家一起进步,也希望大家能够多多支持! 1.今天我先分享一个遮罩层弹 ...

  5. 【BZOJ2002】【HNOI2010】弹飞绵羊 [分块]

    弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 某天,Lostmonkey发明了一 ...

  6. Codeforces 270E Flawed Flow 网络流问题

    题意:给出一些边,给出边的容量.让你为所有边确定一个方向使得流量最大. 题目不用求最大流, 而是求每条边的流向,这题是考察网络流的基本规律. 若某图有最大,则有与源点相连的边必然都是流出的,与汇点相连 ...

  7. suse下自动启动脚本

    suse下自动启动脚本 http://blog.csdn.net/herobox/article/details/8961358 suse下自动启动脚本 也许你对SUSE Linux很了解,也许你不太 ...

  8. 使用Windows下的git工具往github上传代码 踩坑记录

    使用Windows下的git工具往github上传代码 踩坑记录 背景 由于以前接触的项目都是通过svn进行版本控制,现在公司项目使用git,加上自己平时有一个练手小项目,趁着周末试着把项目上传到自己 ...

  9. mysql 单列索引限制

    innodb_large_prefix. 这个参数默认值是OFF.当改为ON时,允许列索引最大达到3072. >=5.7.7默认打开 <=5.7.6默认关闭 innodb_large_pr ...

  10. 根据流程实例ID获取当前任务

    JAVA: Task task = this.processEngine.getTaskService().createTaskQuery().processInstanceId(“132501”). ...