题目

聪明的质监员

题解

这道题和之前Sabotage G的那道题类似,都是用二分答案求解(这道题还要简单一些,不需要用数学推导二分条件,只需简单判断一下即可)。

同时为了降低复杂度,肯定不能用暴力求解 \(y_{i}\) 的值,很明显这里用到前缀和,到时候计算 \(y_{i}\) 只需用两个前缀和相减一下,再相乘即可。

关于二分区间,这个很明显,若 \(s>y\) ,\(W\) 就二分到左边的区间,否则二分到右边。每选一个 \(W\) 所对应的 \(\left| s-y \right|\) 的值都记录下来,最后选择最小的那个作为答案。复杂度 \(O((m+n)log(w_{max}-w_{min}))\) 。

参考代码

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
#define MAX 200001
typedef long long ll;
int n, m;
ll s;
int w[MAX], v[MAX];
int sec[MAX][2];
ll sum[MAX], sum_v[MAX];
ll res= 1e18; bool check(int x)
{
sum[0] = sum_v[0] = 0;
for(int i=1;i<=n;i++)
if (w[i] >= x)
{
sum[i] = sum[i - 1] + 1;
sum_v[i] = sum_v[i - 1] + v[i];
}
else
{
sum[i] = sum[i - 1];
sum_v[i] = sum_v[i - 1];
}
ll y = 0;
for (int i = 1; i <= m; i++)
y += (sum[sec[i][1]] - sum[sec[i][0] - 1]) * (sum_v[sec[i][1]] - sum_v[sec[i][0]-1]);
if (llabs(s - y) < res)
res = llabs(s - y);
if (s >= y)
return 1;
return 0;
} int main()
{
cin >> n >> m >> s;
for (int i = 1; i <= n; i++)
scanf("%d %d", &w[i], &v[i]);
for (int i = 1; i <= m; i++)
scanf("%d %d", &sec[i][0], &sec[i][1]);
int l = 0, r = 1000000;
while (l <= r)
{
int mid = (l + r) / 2;
if (check(mid))//s>y
r = mid - 1;
else
l = mid + 1;
}
cout << res;
}

最新文章

  1. 《图解TCP/IP》读书笔记
  2. 转载:java 中对类中的属性使用set/get方法的意义和用法
  3. AngularJS快速入门指南13:表单
  4. 我心中的核心组件(可插拔的AOP)~第六回 消息组件~续
  5. [LeetCode]题解(python):082 - Remove Duplicates from Sorted List II
  6. UML 2.0(装载)
  7. loadView与viewDidLoad不同 &amp;&amp; loadView学习总结
  8. [iOS]使用symbolicatecrash分析crash文件
  9. js中判断按键的方法
  10. UUShutdown关机工具 - 给 Windows8.1Metro 开始屏幕添加 关机重启按钮
  11. bootstrapValidator 使用(包含入门demo,常用方法,以及常用的规则)
  12. [图形学] 结束 [Unity Shader] 开始
  13. 通过JNDI从服务器容器中获取资源_Spring JNDI+Mysql+Tomcat
  14. C++11标准中常用到的各种算法汇总.
  15. Java虚拟机垃圾收集算法
  16. sublime text3 离线安装插件方法 package control
  17. java 8 日期函数
  18. You Don&#39;t Know JS: this &amp; Object Prototypes( 第2章 this)
  19. Remove Duplicates From Sorted Array leetcode java
  20. react-router v4.0 知识点

热门文章

  1. ifix与4G DTU对接实现数据显示
  2. Intouch/ifix关于语音报警的一种设置思路
  3. Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)
  4. 用QT写的简单Todo记事本-附源码(浮动窗口)
  5. AT4828 [ABC152D] Handstand 2 TJ
  6. 洛谷P2962题解
  7. Windows协议 LDAP篇 - Actite Directory
  8. Salesforce Integration 概览(五) Remote Call-In(远程操作 外部-&gt;salesforce)
  9. 20分钟掌握Android Gradle
  10. C++小知识——显示VS大括号/花括号折叠按钮