[NOIP2011] 聪明的质监员 二分+前缀和
考试的时候打的二分但没有用前缀和维护。但是有个小细节手误打错了结果挂掉了。
绝对值的话可能会想到三分,但是注意到w增大的时候y是减小的,所以单调性很明显,用二分就可以。但注意一个问题,就是二分最后的结果不一定是最优的,只是在它属于的符号里是最优的,所以需要最后存正负的最优解去比较。
至于check(),先把所有满足wi>=W的所有条件的num(个数)和v(权值)在本位置加上,求前缀和。
即∑vi(wi>=W);∑num(wi>=W)。最后用区间的话用前缀和相减维护即可。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define pos(i,a,b) for(long long i=(a);i<=(b);i++) #define N 410000 long long n,m,s; long long w[N],v[N]; struct haha{ long long left,right; }cun[N]; long long ma; long long l,r,ans; long long aabs(long long x){ return x<0?(-x):x; } long long temp,ans1=0x7fffffffffffffffLL,ans2=0x7fffffffffffffffLL; long long pren[N],prevv[N]; long long check(long long x){ temp=0; pos(i,1,n){ pren[i]=pren[i-1]+(w[i]>=x); if(w[i]>=x){ prevv[i]=prevv[i-1]+v[i]; } else{ prevv[i]=prevv[i-1]; } } pos(i,1,m){ temp+=(pren[cun[i].right]-pren[cun[i].left-1])*(prevv[cun[i].right]-prevv[cun[i].left-1]); } if(temp-s>0){ ans1=ans1>temp-s?temp-s:ans1; return 1; } if(temp-s==0){ printf("0"); return 2; } if(temp-s<0){ ans2=ans2>s-temp?s-temp:ans2; return 0; } } int main(){ //freopen("qc.in","r",stdin); //freopen("qc.out","w",stdout); scanf("%lld%lld%lld",&n,&m,&s); pos(i,1,n){ scanf("%lld%lld",&w[i],&v[i]); ma=max(w[i],ma); } pos(i,1,m){ scanf("%lld%lld",&cun[i].left,&cun[i].right); } l=0,r=ma; while(l<=r){ long long mid=(l+r)>>1; //cout<<"mid="<<mid<<" l="<<l<<" r="<<r<<endl;system("pause"); long long qian=check(mid); if(qian==1) l=mid+1; if(qian==2) return 0; if(qian==0) r=mid-1; } long long ans=ans1>ans2?ans2:ans1; cout<<ans; return 0; }
[NOIP2011] 聪明的质监员 二分+前缀和的更多相关文章
- Luogu P1314 聪明的质监员(二分+前缀和)
P1314 聪明的质监员 题意 题目描述 小\(T\)是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有\(n\)个矿石,从\(1\)到\(n\)逐一编号,每个矿石都有自己的重量\(w_i\) ...
- NOIP2011聪明的质监员题解
631. [NOIP2011] 聪明的质监员 ★★ 输入文件:qc.in 输出文件:qc.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 小 T 是一名质量监督 ...
- NC16597 [NOIP2011]聪明的质监员
NC16597 [NOIP2011]聪明的质监员 题目 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 \(n\) 个矿石,从 \(1\) 到 \(n\) 逐一编号,每个矿 ...
- P1314 聪明的质监员(前缀和+二分)
P1314 聪明的质监员 显然可以二分参数W 统计Y用下前缀和即可. #include<iostream> #include<cstdio> #include<cstri ...
- 【洛谷P1314】[NOIP2011]聪明的质监员
聪明的质监员 题目链接:https://www.luogu.org/problemnew/show/P1314 Y(W)随W的值增大而减小 二分W的值,找到最小的W使得Y(W)>S: 比较Y(W ...
- $Noip2011/Luogu1314$ 聪明的质监员 二分+巧妙前缀和
$Luogu$ $Sol$ 首先$W$一定是某个$w_i$.于是一种暴力方法就出炉了,枚举$W$再计算. 注意到,满足$S-Y$的绝对值最小的$Y$只可能是两种,一种是$<S$的最大的$Y$,一 ...
- [NOIP2011]聪明的质监员 题解
题目大意: 额--貌似蛮清晰的,就不赘述了. 思路: 首先不难发现M越大Y越小,因此可以二分答案(方向不要弄错),二分出最小的不小于S的Y即可.而计算Y时可用前缀和O(n+m)求得.两种边界情况也要考 ...
- Luogu P1314 聪明的质监员 二分答案
题目链接 Solution 这个范围不是二分就是结论题就是数学题... 然后再看一会差不多就可以看出来有单调性所以就可以确定二分的解法了 二分那个$W$,用前缀和$O(n+m)$的时间来求出对答案的贡 ...
- Luogu 1314 [NOIP2011] 聪明的质监员
二分答案 + 前缀和. 题面中式子的意思是每一个区间$[l, r]$的贡献是这个区间内$w_i \geq W$的个数乘以这些$i$的$v_i$和. 很快发现了答案具有单调性,可以做两遍二分,分别看看小 ...
随机推荐
- react系列从零开始-react介绍
react算是目前最火的js MVC框架了,写一个react系列的博客,顺便回忆一下react的基础知识,新入门前端的小白,可以持续关注,我会从零开始教大家用react开发一个完整的项目,也会涉及到w ...
- [基础架构]PeopleSoft Application Server 重要文件说明
我们都知道PeopleSoft是由几个不同的服务组成的,他们在PeopleSoft体系结构中扮演着自己的角色.这些服务具有不同的文件结构并包含重要的可执行文件和配置文件. 以下是Peoplesoft体 ...
- python编程快速上手之第5章实践项目参考答案
#!/usr/bin/env python3.5 # coding:utf-8 # 5.6.1 # 好玩游戏的物品清单 # 给定一个字典,包含物品名称和数量,并打印出数量对应的物品 dict_stuf ...
- JS操作字符串常用的方法
JS操作String对象的方法 charAt(index):返回指定索引处的字符串charCodeAt(index):返回指定索引处的字符的Unicode的值concat(str1,str2,...) ...
- Unity Shader入门教程(一)
参考文献:http://www.360doc.com/content/13/0923/15/12282510_316492286.shtml Unity Shader是着色器,将纹理.网格信息输入,得 ...
- C3制作导航栏分割线及立体风格
//首先写一个导航栏样式 .nav{ width:560px; height: 50px; font:bold 0/50px Arial; text-align:center; ...
- Hadoop之HDFS及NameNode单点故障解决方案
Hadoop之HDFS 版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/QQ技术交流群:299142667 H ...
- JDBC之组件封装
本文所需架包:mysql-connector-java-5.1.7-bin.jar(连接MySQL数据库需要),ojdbc6.jar(连接Oracle数据库需要) 1.JDBC工具类(JDBCUtil ...
- Swift 轻量级网络层设计
前言 普遍我们的网络层设计的时候直接是如下结构APIManager.post(url, parameter,completeHandle),服务器配置在APIManager.m文件中进行配置.这样一个 ...
- iOS事件响应链(Responder Chain)
概述 在iOS中,视图的层级一般都是 父视图->添加各种子视图.这时候某个视图(子视图)上有个按钮,需要我们交互.但是有时候我们会发现无论如何都没有反应.这时候可能就是我们对iOS的事件传递响应 ...