P4602 [CTSC2018]混合果汁(主席树)

P4602 [CTSC2018]混合果汁

共有nnn种果汁,第iii种果汁的美味度为did_idi,每升价格为pip_ipi,在一瓶混合果汁中,最多只能添加lil_ili升。

mmm个询问,每次询问给出两个数g,Lg, Lg,L,我们要找出价格不大于ggg,体积不小于LLL的混合果汁的最大美味度。

混合果汁的美味度为所有参与混合的果汁的最小值,如果没有满足条件的混合果汁则输出−1-11

把果汁按照美味度排一个序,对每个询问二分枚举did_idi,然后judge[i,n][i, n][i,n]上的果汁是否可以混合得到满足要求,

当美味度最小值确定了,我们如何挑选果汁,不难想到,肯定是优先选价格更低的,然后次小的,依次类推,

我们按照美味值的相对顺序排序,然后以价格为下标建立主席树,这样我们就只要在[mid+1,n][mid + 1, n][mid+1,n]区间的主席树上去判断何不合法就行,

单次求解的复杂度是log⁡2n\log ^ 2 nlog2n的,感觉好像用不用整体二分效率应该是差不多的吧,整体复杂度都是Olog⁡2nO \log ^ 2 nOlog2n的。

#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10, maxn = 100000;int n, m, num, a[N], ans[N], root[N], ls[N << 5], rs[N << 5];long long sum[N << 5], cost[N << 5];struct Res {int d, p, l;void read() {scanf("%d %d %d", &d, &p, &l);}bool operator < (const Res &t) const {return d < t.d;}
}s[N];struct Ans {int id;long long g, l;
}q[N], q1[N], q2[N];void update(int &rt, int pre, int l, int r, int x, int v) {rt = ++num;ls[rt] = ls[pre], rs[rt] = rs[pre], sum[rt] = sum[pre] + v, cost[rt] = cost[pre] + 1ll * x * v;if (l == r) {return ;}int mid = l + r >> 1;if (x <= mid) {update(ls[rt], ls[pre], l, mid, x, v);}else {update(rs[rt], rs[pre], mid + 1, r, x, v);}
}bool judge(int rt1, int rt2, int l, int r, long long pre_G, long long pre_L, long long G, long long L) {if (l == r) {if (pre_L + sum[rt2] - sum[rt1] < L) {return false;}return pre_G + (L - pre_L) * l <= G;}int mid = l + r >> 1;if (pre_L + sum[ls[rt2]] - sum[ls[rt1]] >= L) {return judge(ls[rt1], ls[rt2], l, mid, pre_G, pre_L, G, L);}else {pre_L += sum[ls[rt2]] - sum[ls[rt1]];pre_G += cost[ls[rt2]] - cost[ls[rt1]];return judge(rs[rt1], rs[rt2], mid + 1, r, pre_G, pre_L, G, L);}
}void solve(int l, int r, int L, int R) {if (l > r | L > R) {return ;}if (l == r) {for (int i = L; i <= R; i++) {ans[q[i].id] = l;}return ;}int mid = l + r >> 1, cnt1 = 0, cnt2 = 0;for (int i = L; i <= R; i++) {if (judge(root[mid], root[n], 1, maxn, 0, 0, q[i].g, q[i].l)) {q2[++cnt2] = q[i];}else {q1[++cnt1] = q[i];}}for (int i = 1; i <= cnt1; i++) {q[L + i - 1] = q1[i];}for (int i = 1; i <= cnt2; i++) {q[L + cnt1 + i - 1] = q2[i];}solve(l, mid, L, L + cnt1 - 1), solve(mid + 1, r, L + cnt1, R);
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);scanf("%d %d", &n, &m);a[1] = -1;for (int i = 2; i <= n + 1; i++) {s[i].read();a[i] = s[i].d;}n++;sort(a + 1, a + 1 + n);sort(s + 1, s + 1 + n);for (int i = 2; i <= n; i++) {update(root[i], root[i - 1], 1, maxn, s[i].p, s[i].l);}for (int i = 1; i <= m; i++) {long long g, l;scanf("%lld %lld", &g, &l);q[i] = {i, g, l};}solve(1, n, 1, m);for (int i = 1; i <= m; i++) {printf("%d\n", a[ans[i]]);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中的对象一定在堆上分配吗?

首先&#xff0c;为解释这个问题&#xff0c;需要的基本知识如下&#xff08;如果对以下概念不太熟悉&#xff0c; 可以先了解下&#xff09;&#xff1a; 1.JVM内存结构&#xff0c;传送门 2.即时编译&#xff08;JIT&#xff09;&#xff0c;传送门 3. 逃逸分析&#xff0c;…

最全的 netcore 3.0 升级实战方案

1、哈喽大家中秋节&#xff08;后&#xff09;好呀&#xff01;感觉已经好久没有写文章了&#xff0c;但是也没有偷懒哟&#xff0c;我的视频教程《系列一、NetCore 视频教程&#xff08;Blog.Core&#xff09;》也已经录制八期了&#xff0c;还在每周末同步更新中&#xff0c;…

H - Hello Ms. Ze(树状数组套主席树,线段树上二分)

H - Hello Ms. Ze 给定nnn种不同的材料&#xff0c;第iii种材料有aia_iai​个&#xff0c;有mmm个操作&#xff0c;操作分为两类&#xff1a; 把第xxx种材料修改为yyy个&#xff0c;只用[l,r][l, r][l,r]区间的材料制作衣服&#xff0c;每件衣服要用kkk个不同的材料&#xff…

JVM——逃逸分析

首先&#xff0c;为解释这个问题&#xff0c;需要的基本知识如下&#xff08;如果对以下概念不太熟悉&#xff0c; 可以先Google下&#xff09;&#xff1a; 1.JVM内存结构&#xff0c;传送门 2.即时编译&#xff08;JIT&#xff09;&#xff0c;传送门 逃逸分析 在编译期间…

ASP.NET Core SignalR:集线器Hub

一、什么是集线器hubs通过SignalR的集线器hubs中定义的方法&#xff0c;服务器可以调用连接中的客户端定义的方法&#xff0c;而客户端也可以调用服务器端集线器中定义的方法。SignalR负责实现了客户端和服务器之间的实时通信。二、配置SignalR的hubsSignalR通过在Startup.Conf…

P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演 + 伯努利数)

P6271 [湖北省队互测2014]一个人的数论 ∑i1nim[gcd⁡(i,n)1]∑d∣nμ(d)dm∑i1ndim由伯努利数可知∑i0nim1m1∑i0mCm1iBi(n1)m−i1设fi1m1Bm−i1Cm1i,则有∑d∣nμ(d)dm(∑i1m1fi(nd)i(nd)m)∑i1m1fini∑d∣nμ(d)dm−i(nm∑d∣nμ(d))考虑后项∑d∣nμ(d)dm−i&#xff0c;迪…

Java面试题汇总

1、综合素质层面 个人介绍、离职原因、兴趣爱好等 https://mp.weixin.qq.com/s?__bizMzI3NzE0NjcwMg&mid2650121143&idx2&snf4c4f26bc5d2132352f12d28c8cb2264&chksmf36bbe96c41c3780d8086adec7be8737ce3718db9c2a7fa33aa7591f8ae179ed3240286f3886&scen…

微软发布.Net Core 3.0 RC1,最终版本定于9月23日

2019.9.17 微软 宣布推出.NET Core 3.0 Release Candidate 1。就像Preview 9一样&#xff0c;主要专注于为 .NET Core 3.0 发布最终版本 。现在变得非常非常接近。将在9月23日.NET Conf上发布最终版本。.NET Core 3.0是从仅支持Windows传统的 .NET框架向更现代化的开源实现过渡…

JVM内存结构 VS Java内存模型 VS Java对象模型

Java作为一种面向对象的&#xff0c;跨平台语言&#xff0c;其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似&#xff0c;很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模型和Java对象模型&#xff0c;这就是三个截然不同的概念&…

ZOJ The Sum of Unitary Totient(min_25 筛)

The Sum of Unitary Totient 积性函数&#xff0c;满足质数点是多项式&#xff0c;直接 min_25 了&#xff0c;由于单次求解&#xff0c;所以使用递归的 min_25 会较快。 #include <bits/stdc.h>using namespace std;const int N 1e5 10;int prime[N], a[N], id1[N],…

迫于误解压力,RMS从自由软件基金会与MIT离职

自由软件基金会官网显示&#xff0c;基金会创始人兼主席、自由软件运动发起人 Richard M. Stallman&#xff08;RMS&#xff09;辞去主席职务并辞去董事会职务。而另一边&#xff0c;stallman.org 邮件列表显示&#xff0c;RMS 已经从麻省理工学院&#xff08;MIT&#xff09;计…

F - Colorful Tree(LCA,树上差分,离线处理)

F - Colorful Tree 给定一棵树&#xff0c;边有边权&#xff0c;且每条边有一个颜色&#xff0c;有mmm次操作&#xff0c; 每次给定x,y,u,vx, y, u, vx,y,u,v&#xff0c;如果把颜色为xxx的边&#xff0c;边权修改为yyy&#xff0c;求u,vu, vu,v两点的距离&#xff0c;考虑 …

让人迷茫的三十岁!从专业技能、行业知识和软实力谈一下!

作者&#xff1a;邹溪源&#xff0c;长沙资深互联网从业者&#xff0c;架构师社区合伙人&#xff01;我今年三十岁&#xff0c;我很迷茫&#xff0c;不知道未来该选择什么发展方向。这是我无意中在社区微信群中看到的一位年轻的开发者说的话&#xff0c;之前他也经常会在技术群…

D. Steps to One(概率DP,莫比乌斯反演)

D. Steps to One 设f[i]f[i]f[i]为gcd⁡\gcdgcd为iii&#xff0c;还需要多少个数&#xff0c;那么有f[i]1∑j1mf[gcd⁡(i,j)]mf[i] 1 \frac{\sum\limits_{j 1} ^{m} f[\gcd(i, j)]}{m}f[i]1mj1∑m​f[gcd(i,j)]​&#xff0c; f[1]0f[1] 0f[1]0&#xff0c;考虑化简∑j1mf…

误用.Net Redis客户端工具CSRedisCore,自己挖坑自己填

前导  上次Redis MQ分布式改造完成之后&#xff0c; 编排的容器稳定运行了一个多月&#xff0c;昨天突然收到ETL端同事通知&#xff0c;没有采集到解析日志了。赶紧进服务器看了一下&#xff0c;用于数据接收的receiver容器挂掉了&#xff0c; 尝试docker container start [c…

Java——类加载机制

** 一、什么是类的加载 ** 类的加载指的是将类的.class文件中的二进制数据读入到内存中&#xff0c;将其放在运行时数据区的方法区内&#xff0c;然后在堆区创建一个java.lang.Class对象&#xff0c;用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class…

.NET中国峰会议题征集

月初做的调查《》&#xff0c;参与人数576人&#xff0c;愿意参与分享.NET Core经验的142人&#xff0c;今天发起分会场主题演讲和闪电演讲议题.2014年微软组织成立.NET基金会&#xff0c;微软在成为主要的开源参与者的道路上又前进了一步。2014年以来已经有众多知名公司加入.N…

E. Almost Sorted(构造,递归)

E. Almost Sorted 我们定义 almost sorted 数组为&#xff0c;ai1≥ai−1a_{i 1} \geq a_i - 1ai1​≥ai​−1&#xff0c;也就是说&#xff0c; 先写几项出来看看&#xff1a; n 1 1 n 2 1 2 2 1 n 3 1 2 3 1 3 2 2 1 3 3 2 1 容易发现一定是&#xff0c;形如x,x−1,x−…

D. Cut and Stick(Codeforces Round #716 (Div. 2))

D. Cut and Stick 给定一个长度为nnn的数组&#xff0c;里面元素为a1,a2,a3,…,an−1,an,(1≤ai≤n)a_1, a_2, a_3, \dots, a_{n- 1}, a_n, (1 \leq a_i \leq n)a1​,a2​,a3​,…,an−1​,an​,(1≤ai​≤n)&#xff0c;有mmm次询问&#xff0c;每次给定l,rl, rl,r&#xff0…

一些学习教程资料等你来拿

近期整理自己的云盘中发现近年来私藏了很多学习资料和教程&#xff0c;本着独乐乐不如众乐乐的精神&#xff0c;特将其分享出来供有兴趣的童鞋学习。进入公众号&#xff0c;输入关键词"敏捷"/"agile"/"scrum"&#xff0c;即可获得敏捷开发类别的…