描述

小T 是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi 。检验矿产的流程是: 
1 、给定m 个区间[Li ,Ri]; 
2 、选出一个参数 W; 
3 、对于一个区间[Li ,Ri],计算矿石在这个区间上的检验值Yi:
Yi=Σ1*Σvj,Σ的循环变量为j,这里j要满足j∈[Li,Ri]且wj≥W,这里j是矿石编号。

这批矿产的检验结果Y为各个区间的检验值之和。ΣYi,Σ的循环变量为i,1≤i≤m。

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

输入格式

第一行包含三个整数n ,m,S,分别表示矿石的个数、区间的个数和标准值。 接下来的n 行,每行 2 个整数,中间用空格隔开,第i+1 行表示 i 号矿石的重量 wi 和价值vi 。 
接下来的m 行,表示区间,每行2 个整数,中间用空格隔开,第i+n+1 行表示区间[Li, Ri]的两个端点 Li 和Ri 。注意:不同区间可能重合或相互重叠。 

输出格式

输出只有一行,包含一个整数,表示所求的最小值。 

测试样例1

输入

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。

备注

对于10% 的数据,有 1 ≤n ,m≤10; 
对于30% 的数据,有 1 ≤n ,m≤500 ; 
对于50% 的数据,有 1 ≤n ,m≤5,000; 
对于70% 的数据,有 1 ≤n ,m≤10,000 ; 
对于100%的数据,有 1 ≤n ,m≤200,000,0 < wi, vi≤10^6,0 < S≤10^12,1 ≤Li ≤Ri ≤n 。 

注意区间的处理,每次检查都要再算一遍前缀和

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn = 220005;
struct STONE{long long w;long long v;
};
long long n,m,s,l[maxn],r[maxn],sum[maxn],sumv[maxn],all,ans = 98765432112345L;
STONE stone[maxn];
void input(){cin>>n>>m>>s;all = 0;for(int i = 1;i <= n;i++){scanf("%lld%lld",&stone[i].w,&stone[i].v);if(all < stone[i].w) all = stone[i].w;}for(int i = 1;i <= m;i++){scanf("%lld%lld",&l[i],&r[i]);}
}
bool check(long long t){sum[0] = sumv[0] = 0;for(int i = 1;i <= n;i++){if(stone[i].w >= t){sumv[i] = sumv[i-1] + stone[i].v;sum[i] = sum[i-1] + 1;}else{sumv[i] = sumv[i-1];sum[i] = sum[i-1];}}all = 0;for(int i = 1;i <= m;i++){all += (sumv[r[i]] - sumv[l[i]-1]) * (sum[r[i]] - sum[l[i]-1]);}ans = min(abs(all - s),ans);return all < s;
}
void div(){long long lans = 0,rans = all,mans;while(lans <= rans){mans = (lans + rans) >> 1;if(check(mans)){rans = mans - 1;}else{lans = mans + 1;}}check(mans+1);if(mans > 0)check(mans-1);cout<<ans;
}
int main(){input();div();return 0;
}

View Code

转载于:https://www.cnblogs.com/hyfer/p/5656217.html

NOIP2011 聪明的质监员相关推荐

  1. NOIP2011聪明的质监员题解

    631. [NOIP2011] 聪明的质监员 ★★   输入文件:qc.in   输出文件:qc.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述]  小 T 是一名质量 ...

  2. [NOIP2011]聪明的质监员

    题目描述 小T是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从1到 n 逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是: 1.给定m个区间[Li,Ri]: 2 ...

  3. 聪明的质监员 2011年NOIP全国联赛提高组(二分+前缀和)

    聪明的质监员 2011年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 小 T 是一名质量监督员, ...

  4. 【洛古 P1314】[NOIP2011 提高组] 聪明的质监员

    题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n n n 个矿石,从 1 1 1 到 n n n 逐一编号,每个矿石都有自己的重量 w i w_i wi​ 以及价值 v ...

  5. P1314 聪明的质监员(前缀和+二分)

    https://www.luogu.org/problem/P1314 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的 ...

  6. AcWing 499. 聪明的质监员

    解题思路: https://www.acwing.com/solution/content/33961/ 代码如下: #include <iostream> using namespace ...

  7. [NOIP2011]聪明的质检员

    [问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有$n$个矿石,从 1 到$n$逐一编号,每个矿石都有自己的重量$w_i$以及价值$v_i$.检验矿产的流程是: 1. 给 ...

  8. NOIP2011 聪明的质检员 - 前缀和 - 二分

    这题需要操作w,使得y与s尽量接近 那么考虑到y可以比s小一点也可以大一点,可以分开考虑,若y < s 则尝试把y弄大一点, 这样就可以二分w,使y越来越接近s,并且实时记录最优解,也不用管最后 ...

  9. NOIP2011聪明的质检员

    题目来源:https://www.luogu.org/problem/show?pid=1314 对w进行二分答案. 处理过程中用前缀和优化. 注意要二分两次,一次是w<s时s-w的最小值,另一 ...

最新文章

  1. 使用正则表达式抽取新闻/BBS网页发表时间
  2. CSS3 过渡(Transition)
  3. 【arduino】在Arduino上运行FreeRTOS操作系统,freeRTOS入门教程helloword
  4. 离散信号经过FFT处理后,幅度,相位,功率的计算
  5. java blockingqueue_Java多线程进阶(三一)—— J.U.C之collections框架:BlockingQueue接口...
  6. 聚类(下) 谱聚类算法
  7. redis学习与入门~~~
  8. 助力泵嗡嗡响解决方法_突破不可能,3D打印革命性的制造高效高扭矩的径向活塞泵...
  9. BP神经网络 MATLAB源程序
  10. 医院信息管理系统需求分析
  11. 从游戏商业思维中分析游戏用户行为数据(主要是参考网上的一些感想)
  12. apktool java_apktool的使用
  13. My Eighty-second Page - 打家劫舍Ⅱ - By Nicolas
  14. 不积跬步,无以至千里
  15. Go 面向接口编程实战
  16. 录音转文字的app哪个好用?来试试这几个宝藏软件
  17. 深入分析Kafka架构(三):消费者消费方式、三种分区分配策略、offset维护
  18. 【Python数据分析之pandas01】两个常用的数据结构
  19. 【python-02】
  20. 389-MySQL数据库代码封装

热门文章

  1. AngularDart4.0 指南- 显示数据
  2. 解决MVN install一直处于下载jar包等待问题
  3. poj 2186 强连通分量
  4. MVC, MVP, MVVM比较以及区别(下)
  5. 创业者说:我从创业者大会看到了什么
  6. 装了Visual Studio 2005之后重装IIS的问题解决方法
  7. 数组到指针的隐式转换
  8. OCR的备份与恢复方法
  9. ViewPager的事件冲突的解决
  10. OpenCV实现最大最小距离聚类算法