LOJ 2555 「CTSC2018」混合果汁——主席树
题目:https://loj.ac/problem/2555
二分答案,在可以选的果汁中,从价格最小的开始选。
按价格排序,每次可以选的就是一个前缀。对序列建主席树,以价格为角标,维护体积和、体积*价格和。
一开始忘记离散化价格了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define ls Ls[cr]
#define rs Rs[cr]
using namespace std;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
ll rdl()
{
ll ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
const int N=1e5+,M=N*;
int n,tp[N],dy[N],tot,rt[N],Ls[M],Rs[M];ll sl[M],sm[M];
struct Node{
int d,p,l;
bool operator< (const Node &b)const
{return d>b.d;}
}a[N];
int nwnd(int pr)
{
int cr=++tot; ls=Ls[pr];rs=Rs[pr];
sl[cr]=sl[pr]; sm[cr]=sm[pr]; return cr;
}
void ins(int l,int r,int &cr,int pr,int p,int k,ll s)
{
cr=nwnd(pr); sl[cr]+=k; sm[cr]+=s;
if(l==r)return; int mid=l+r>>;
if(p<=mid)ins(l,mid,ls,Ls[pr],p,k,s);
else ins(mid+,r,rs,Rs[pr],p,k,s);
}
bool chk(int l,int r,int cr,ll g,ll lm)
{
if(l==r)
{ if(sl[cr]<lm||lm*tp[l]>g)return false; return true;}
int mid=l+r>>;
if(sl[ls]>=lm)return chk(l,mid,ls,g,lm);
lm-=sl[ls]; g-=sm[ls]; if(g<=)return false;
return chk(mid+,r,rs,g,lm);
}
int main()
{
n=rdn(); int Q=rdn();
for(int i=;i<=n;i++)
{
a[i].d=rdn();a[i].p=rdn();a[i].l=rdn();
tp[i]=a[i].p;
}
sort(a+,a+n+);
sort(tp+,tp+n+); int m=unique(tp+,tp+n+)-tp-;
for(int i=;i<=n;i++)
{
int d=lower_bound(tp+,tp+m+,a[i].p)-tp;
ins(,m,rt[i],rt[i-],d,a[i].l,(ll)a[i].p*a[i].l);
}
ll g,lm; int ans,l,r;
while(Q--)
{
g=rdl();lm=rdl(); ans=;
l=; r=n;
while(l<=r)
{
int mid=l+r>>;
if(chk(,m,rt[mid],g,lm))ans=mid,r=mid-;
else l=mid+;
}
printf("%d\n",ans?a[ans].d:-);
}
return ;
}
LOJ 2555 「CTSC2018」混合果汁——主席树的更多相关文章
- LOJ 2551 「JSOI2018」列队——主席树+二分
题目:https://loj.ac/problem/2551 答案是排序后依次走到 K ~ K+r-l . 想维护一个区间排序后的结果,使得可以在上面二分.求和:二分可以知道贡献是正还是负. 于是想用 ...
- Loj #2554. 「CTSC2018」青蕈领主
Loj #2554. 「CTSC2018」青蕈领主 题目描述 "也许,我的生命也已经如同风中残烛了吧."小绿如是说. 小绿同学因为微积分这门课,对"连续"这一概 ...
- Loj #2553. 「CTSC2018」暴力写挂
Loj #2553. 「CTSC2018」暴力写挂 题目描述 temporaryDO 是一个很菜的 OIer .在 4 月,他在省队选拔赛的考场上见到了<林克卡特树>一题,其中 \(k = ...
- loj#2552. 「CTSC2018」假面
题目链接 loj#2552. 「CTSC2018」假面 题解 本题严谨的证明了我菜的本质 对于砍人的操作好做找龙哥就好了,blood很少,每次暴力维护一下 对于操作1 设\(a_i\)为第i个人存活的 ...
- loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点
loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点 链接 loj 思路 用交错关系建出图来,发现可以直接缩点,拓扑统计. 完了吗,不,瓶颈在于边数太多了,线段树优化建图. 细节 ...
- LOJ 2553 「CTSC2018」暴力写挂——边分治+虚树
题目:https://loj.ac/problem/2553 第一棵树上的贡献就是链并,转化成 ( dep[ x ] + dep[ y ] + dis( x, y ) ) / 2 ,就可以在第一棵树上 ...
- LOJ #2533. 「CTSC2018」暴力写挂(边分治合并)
题意 给你两个有 \(n\) 个点的树 \(T, T'\) ,求一对点对 \((x, y)\) 使得 \[ depth(x) + depth(y) - (depth(LCA(x , y)) + dep ...
- loj 2955 「NOIP2018」保卫王国 - 树链剖分 - 动态规划
题目传送门 传送门 想抄一个短一点ddp板子.然后照着Jode抄,莫名其妙多了90行和1.3k. Code /** * loj * Problem#2955 * Accepted * Time: 26 ...
- LOJ 2557 「CTSC2018」组合数问题 (46分)
题目:https://loj.ac/problem/2557 第一个点可以暴搜. 第三个点无依赖关系,k=3,可以 DP .dp[ cr ][ i ][ j ] 表示前 cr 个任务.第一台机器最晚完 ...
随机推荐
- layer帮助手册
layer帮助手册 键:值 调用时按需重新分配,可实现各种风格,如:$.layer({键:值,键:值,......}) 描述 type:0 层的类型.0:信息框(默认),1:页面层,2:ifra ...
- 20190814 On Java8 第四章 运算符
第四章 运算符 优先级 程序员经常都会忘记其他优先级规则,所以应该用括号明确规定运算顺序. 赋值 基本类型的赋值都是直接的,而不像对象,赋予的只是其内存的引用.举个例子,a = b ,如果 b 是基本 ...
- Linux命令行基础操作
目录 1.打开终端命令行 2.常用快捷键 2.1 tab键 2.2 Ctrl+c组合键 2.3 Ctrl+d组合键 2.4Ctrl+Shift+c组合键和Ctrl+Shift+v组合键 2.5图形界面 ...
- jmeter uniq 取值方式设置
- SpringMvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Struts2之处理结果集
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...
- 洛谷 P1589 泥泞路 & 2019青岛市竞赛(贪心)
题目链接 https://www.luogu.org/problemnew/show/P1589 解题思路 用结构体存下每一段泥泞路的左端点和右端点,然后用sort根据左端点排序,采用贪心的思想,从左 ...
- Zookeeper-技术专区-配置以及学习
zookeeper 一.zookeeper下载 zookeeper下载可以直接去官网进行下载 https://zookeeper.apache.org/releases.html ,可以选择最新版本 ...
- 一个简单的winform程序调用webservices
本文原创,如需转载,请标明源地址,谢谢合作!http://blog.csdn.net/sue_1989/article/details/6597078 本文的编写IDE为VSTS2008和.NET F ...
- k3 cloud移动审批提示实体类型BD_TaxRate中不存在名为AmountDigits属性
原因是由于字段没有正确绑定币别,找到对应的字段并修改绑定币别