考场上写了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. [HEOI2017]分手是祝愿 期望概率dp 差分

    经分析可知:I.操作每个灯可看做一种异或状态 II.每个状态可看做是一些异或状态的异或和,而且每个异或状态只能由它本身释放或放入 III.每一种异或状态只有存在不存在两中可行状态,因此这些灯只有同时处 ...

  2. 常见编程语言对REPL支持情况小结

    最近跟一个朋友聊起编程语言的一些特性,他有个言论让我略有所思:“不能REPL的都是渣”.当然这个观点有点偏激,但我们可以探究一下,我们常用的编程语言里面,哪些支持REPL,哪些不支持,还有REPL的一 ...

  3. UVA10480:Sabotage(最小割+输出)

    Sabotage 题目链接:https://vjudge.net/problem/UVA-10480 Description: The regime of a small but wealthy di ...

  4. 用filters定制化spring的包扫描

    Fiter的信息如下: Filter的类型有:annotation(这是spring默认的),assignable,aspectj, regex,custom 首先看一下我这个demo的目录结构: 上 ...

  5. 对Office文档进行授权

    Microsoft.Office.Interop.Word.ApplicationClass app = new Microsoft.Office.Interop.Word.ApplicationCl ...

  6. PHP设计模式-工厂模式、单例模式、注册模式

    本文参考慕课网<大话PHP设计模式>-第五章内容编写,视频路径为:http://www.imooc.com/video/4876 推荐阅读我之前的文章:php的设计模式 三种基本设计模式, ...

  7. 【poj1743-Musical Theme】不可重叠最长重复子串-后缀数组

    http://poj.org/problem?id=1743 这题是一道后缀数组的经典例题:求不可重叠最长重复子串. 题意: 有N(1 <= N <=20000)个音符的序列来表示一首乐曲 ...

  8. [bzoj3277==bzoj3473]出现k次子串计数——广义后缀自动机+STL

    Brief Description 给定n个字符串,对于每个字符串,您需要求出在所有字符串中出现次数大于等于k次的子串个数. Algorithm Design 先建立一个广义后缀自动机,什么是广义后缀 ...

  9. Python学习笔记 - day2 - PyCharm的基本使用

    什么是IDE 开始学习的小白同学,一看到这三个字母应该是懵逼的,那么我们一点一点来说. 既然学习Python语言我们就需要写代码,那么代码写在哪里呢? 在记事本里写 在word文档里写 在sublim ...

  10. zabbix mysql自动发现规则

    1.配置mysql,添加监控用的账号,授予查看所有用户线程/连接的权限 GRANT PROCESS ON *.* TO 'zabbix'@'127.0.0.1' identified BY '20c1 ...