luogu P1314 聪明的质监员

[NOIP2011 提高组] 聪明的质监员

题目描述

小T 是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有 \(n\) 个矿石,从 \(1\)\(n\) 逐一编号,每个矿石都有自己的重量 \(w_i\) 以及价值 \(v_i\) 。检验矿产的流程是:

  1. 给定$ m$ 个区间 \([l_i,r_i]\)
  2. 选出一个参数 \(W\)
  3. 对于一个区间 \([l_i,r_i]\),计算矿石在这个区间上的检验值 \(y_i\)

\[y_i=\sum\limits_{j=l_i}^{r_i}[w_j \ge W] \times \sum\limits_{j=l_i}^{r_i}[w_j \ge W]v_j \]

其中 \(j\) 为矿石编号。

这批矿产的检验结果 \(y\) 为各个区间的检验值之和。即:\(\sum\limits_{i=1}^m y_i\)

若这批矿产的检验结果与所给标准值 \(s\) 相差太多,就需要再去检验另一批矿产。小T 不想费时间去检验另一批矿产,所以他想通过调整参数 \(W\) 的值,让检验结果尽可能的靠近标准值 \(s\),即使得 \(|s-y|\) 最小。请你帮忙求出这个最小值。

输入格式

第一行包含三个整数 \(n,m,s\),分别表示矿石的个数、区间的个数和标准值。

接下来的 \(n\) 行,每行两个整数,中间用空格隔开,第 \(i+1\) 行表示 \(i\) 号矿石的重量 \(w_i\) 和价值 \(v_i\)

接下来的 \(m\) 行,表示区间,每行两个整数,中间用空格隔开,第 \(i+n+1\) 行表示区间 \([l_i,r_i]\) 的两个端点 \(l_i\)\(r_i\)。注意:不同区间可能重合或相互重叠。

输出格式

一个整数,表示所求的最小值。

样例

5 3 15 
1 5 
2 5 
3 5 
4 5 
5 5 
1 5 
2 4 
3 3
10

提示

【输入输出样例说明】

\(W\)\(4\) 的时候,三个区间上检验值分别为 \(20,5 ,0\) ,这批矿产的检验结果为 \(25\),此时与标准值 \(S\) 相差最小为 \(10\)

【数据范围】

对于 \(100\%\) 的数据,有 $ 1 ≤n ,m≤200,000$,\(0 < w_i,v_i≤10^6\)\(0 < s≤10^{12}\)\(1 ≤l_i ≤r_i ≤n\)

关于此公式的解释

\[y_i=\sum\limits_{j=l_i}^{r_i}[w_j \ge W] \times \sum\limits_{j=l_i}^{r_i}[w_j \ge W]v_j \]

yi = (范围i ~ j中满足w >= W的个数) * (范围i ~ j中满足w >= W这个条件的矿石价值之和)

分析

  • “选出一个参数W” 并且 随着W增大,( s - y )一直变大
    二分

  • 需要求m个给定范围的 符合条件的个数符合条件的价值之和
    前缀和

  • \(|s - y|\) 存在绝对值,所以二分之后要比较边界左边和右边哪个更小 --> 和cf round 971 E 类似

代码

#include <iostream>
#include <algorithm>
#include <cstdlib>const int N = 2e5 + 10;
long long n, m, goal;  //记得定义成long long类型
int a[N], s[N], w[N], v[N], l[N], r[N];  //a是存储直至当前下标满足条件的个数的前缀和,s是存储直至当前下标满足条件的价值的前缀和
using namespace std;long long check(int mid);
int main()
{cin >> n >> m >> goal;for(long long i = 1; i <= n; i++) cin >> w[i] >> v[i];for(long long i = 0; i < m; i++) cin >> l[i] >> r[i];long long l = 0, r = 1e6 + 1;   //r的右边界是wi的最大值,不要忘记了写成nwhile(l < r){int mid = l + r + 1 >> 1;if(check(mid) >= goal) l = mid;else r = mid - 1;}cout << min(abs(check(r) - goal), abs(check(r + 1) - goal));
}
long long check(int mid)
{long long y = 0;for(long long i = 1; i <= n; i++){if(w[i] >= mid) a[i] = a[i - 1] + 1, s[i] = s[i- 1] + v[i];else a[i] = a[i - 1], s[i] = s[i - 1];}for(long long i = 0; i < m; i++){y += ((a[r[i]] - a[l[i] - 1]) * (s[r[i]] - s[l[i] - 1]));}return y;   //后面需要计算r + 1时候的y值,所以直接返回y更方便
}

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

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

相关文章

Mybatis 常见异常

Mybatis 列表查询只返回了部分数据,Sql 语句多出 limit 异常 // list查询接口 List<Info> infoList = xxxMapper.selectList();列表查询接口,只返回了部分数据 原因 通过日志观察,发现日志打印的sql多了limit参数,怀疑时与分页有关; 基于此,搜索资料发现,PageHelp…

寻找 2300 名编程青铜一起写代码,学会就送包!

编程不仅仅是技术的积累,更是一种思维方式的转变。身边越来越多朋友已经意识到,学会一门编程语言,就好像掌握了新的国际通用语言,享受学习交流世界最前沿知识、思想的快乐。编程不仅仅是技术的积累,更是一种思维方式的转变。身边越来越多朋友已经意识到,学会一门编程语言…

【PhpStorm 2024 软件下载与入门级安装教程】-高效智能的 PHP IDE

支持主流框架 PhpStorm完美支持Symfony、Drupal、WordPress、Zend Framework、Laravel、Magento、 Joomla!、CakePHP、Yii ...等各种主流框架。 全能的PHP工具 内建编辑器实际“了解”您的代码并且深刻理解其结构,支持所有PHP语言功能, 在开发现代技术和维护遗留项目皆可完美…

Exchange 2016部署实施案例篇-07.Exchange日常运维检查

有了Exchange Server 相信大家最苦恼的一件事情就是每天要如何检查Exchange Server是否运行正常,今天就给大家分享下日常检查的一些操作步骤。 日常检查 邮件发送功能检查如何确保Exchange服务器可以正常往外网发送邮件,其实这个是很简单的,只需要一个简单的脚本就可以实现,…

巡检人员超长时间停留识别智慧矿山一体机人车防碰撞识别:打造智慧矿山的创新方案

智慧矿山一体机是专为矿山环境量身定制的智能化解决方案,旨在通过集成先进的感知、计算、通信、控制等信息技术和自动控制技术,实现对矿山生产、管理、安全、环保等各个环节的智能化改造和升级。这一方案不仅提高了矿山的生产效率,降低了运营成本,还显著增强了安全监管能力…

Exchange 2016部署实施案例篇-06.升级到最新CU补丁

更新到最新CU补丁这篇其实我是想更新完公网发布在写的,但由于最近条件有限,原来用于测试的公网IP地址由于运营商原因一直没办法更新,所以只好先更新这篇了。 扩展架构首先我们还需要进行域架构扩展(或者让安装程序自己扩展也行),如图所示:扩展 Active Directory 架构: …

【FMC169】基于VITA57.1标准的4发4收射频子模块(基于ADRV9026)

​ 产品概述 FMC169 是一款基于VITA57.1 标准规范,实现4 收4发的射频子模块,该板卡基于ADI的捷变收发器ADRV9026作为处理核心,射频工作范围为75MHz~6GHz频段,发射最大信号带宽450MHz,接收最大带宽200MHz,提供4路发射、4路接收。 该板卡支持外部参考时钟、支持外部本振输入…

Alpha冲刺(5/14)——2024.11.16

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余时间施靖杰 完…

Alpha冲刺(6/14)——2024.11.17

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余时间施靖杰 完…

【小记】如何将多媒体键映射为锁屏

工作电脑为一体机。所有的USB接口都在屏幕的后面。插拔U盘极不方便。于是搜索USB小物件,看能不能通过小物件将USB的接口延长到屏幕前 寻觅一番,找到一个中意的小物件——ELEKS MAKER 极客桌面控制器 如上图所示,小物件有着朋克风,充满现代感。带有3个USB2.0接口,日常工作…

C#获取数字字符串数值连续字符串

C#获取数字字符串数值连续字符串 本文来自博客园,作者:じ逐梦,转载请注明原文链接:https://www.cnblogs.com/ZhuMeng-Chao/p/18552687

数据爬取后,如何进行有效的数据清洗和分析?

在大数据时代,数据的价值不言而喻。数据爬取是获取数据的第一步,但爬取后的数据往往包含噪声、缺失值 和不一致性,这就需要进行数据清洗。清洗后的数据可以用于进一步的分析,以提取有价值的信息和知识。本 文将介绍数据爬取后的数据清洗和分析流程,并提供代码示例。数据清…