考试的时候打的二分但没有用前缀和维护。但是有个小细节手误打错了结果挂掉了。

绝对值的话可能会想到三分,但是注意到w增大的时候y是减小的,所以单调性很明显,用二分就可以。但注意一个问题,就是二分最后的结果不一定是最优的,只是在它属于的符号里是最优的,所以需要最后存正负的最优解去比较。

至于check(),先把所有满足wi>=W的所有条件的num(个数)和v(权值)在本位置加上,求前缀和。

即∑vi(wi>=W);∑num(wi>=W)。最后用区间的话用前缀和相减维护即可。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. #define pos(i,a,b) for(long long i=(a);i<=(b);i++)
  6. #define N 410000
  7. long long n,m,s;
  8. long long w[N],v[N];
  9. struct haha{
  10. long long left,right;
  11. }cun[N];
  12. long long ma;
  13. long long l,r,ans;
  14. long long aabs(long long x){
  15. return x<0?(-x):x;
  16. }
  17. long long temp,ans1=0x7fffffffffffffffLL,ans2=0x7fffffffffffffffLL;
  18. long long pren[N],prevv[N];
  19. long long check(long long x){
  20. temp=0;
  21. pos(i,1,n){
  22. pren[i]=pren[i-1]+(w[i]>=x);
  23. if(w[i]>=x){
  24. prevv[i]=prevv[i-1]+v[i];
  25. }
  26. else{
  27. prevv[i]=prevv[i-1];
  28. }
  29. }
  30. pos(i,1,m){
  31. temp+=(pren[cun[i].right]-pren[cun[i].left-1])*(prevv[cun[i].right]-prevv[cun[i].left-1]);
  32. }
  33. if(temp-s>0){
  34. ans1=ans1>temp-s?temp-s:ans1;
  35. return 1;
  36. }
  37. if(temp-s==0){
  38. printf("0");
  39. return 2;
  40. }
  41. if(temp-s<0){
  42. ans2=ans2>s-temp?s-temp:ans2;
  43. return 0;
  44. }
  45. }
  46. int main(){
  47. //freopen("qc.in","r",stdin);
  48. //freopen("qc.out","w",stdout);
  49. scanf("%lld%lld%lld",&n,&m,&s);
  50. pos(i,1,n){
  51. scanf("%lld%lld",&w[i],&v[i]);
  52. ma=max(w[i],ma);
  53. }
  54. pos(i,1,m){
  55. scanf("%lld%lld",&cun[i].left,&cun[i].right);
  56. }
  57. l=0,r=ma;
  58. while(l<=r){
  59. long long mid=(l+r)>>1;
  60. //cout<<"mid="<<mid<<" l="<<l<<" r="<<r<<endl;system("pause");
  61. long long qian=check(mid);
  62. if(qian==1)
  63. l=mid+1;
  64. if(qian==2)
  65. return 0;
  66. if(qian==0)
  67. r=mid-1;
  68. }
  69. long long ans=ans1>ans2?ans2:ans1;
  70. cout<<ans;
  71. return 0;
  72. }

  

[NOIP2011] 聪明的质监员 二分+前缀和的更多相关文章

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

    P1314 聪明的质监员 题意 题目描述 小\(T\)是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有\(n\)个矿石,从\(1\)到\(n\)逐一编号,每个矿石都有自己的重量\(w_i\) ...

  2. NOIP2011聪明的质监员题解

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

  3. NC16597 [NOIP2011]聪明的质监员

    NC16597 [NOIP2011]聪明的质监员 题目 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 \(n\) 个矿石,从 \(1\) 到 \(n\) 逐一编号,每个矿 ...

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

    P1314 聪明的质监员 显然可以二分参数W 统计Y用下前缀和即可. #include<iostream> #include<cstdio> #include<cstri ...

  5. 【洛谷P1314】[NOIP2011]聪明的质监员

    聪明的质监员 题目链接:https://www.luogu.org/problemnew/show/P1314 Y(W)随W的值增大而减小 二分W的值,找到最小的W使得Y(W)>S: 比较Y(W ...

  6. $Noip2011/Luogu1314$ 聪明的质监员 二分+巧妙前缀和

    $Luogu$ $Sol$ 首先$W$一定是某个$w_i$.于是一种暴力方法就出炉了,枚举$W$再计算. 注意到,满足$S-Y$的绝对值最小的$Y$只可能是两种,一种是$<S$的最大的$Y$,一 ...

  7. [NOIP2011]聪明的质监员 题解

    题目大意: 额--貌似蛮清晰的,就不赘述了. 思路: 首先不难发现M越大Y越小,因此可以二分答案(方向不要弄错),二分出最小的不小于S的Y即可.而计算Y时可用前缀和O(n+m)求得.两种边界情况也要考 ...

  8. Luogu P1314 聪明的质监员 二分答案

    题目链接 Solution 这个范围不是二分就是结论题就是数学题... 然后再看一会差不多就可以看出来有单调性所以就可以确定二分的解法了 二分那个$W$,用前缀和$O(n+m)$的时间来求出对答案的贡 ...

  9. Luogu 1314 [NOIP2011] 聪明的质监员

    二分答案 + 前缀和. 题面中式子的意思是每一个区间$[l, r]$的贡献是这个区间内$w_i \geq W$的个数乘以这些$i$的$v_i$和. 很快发现了答案具有单调性,可以做两遍二分,分别看看小 ...

随机推荐

  1. 利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包

    因为业务需要,项目中需要把asp.netmvc项目打包成exe安装程序给客户,让客户直接可以点下一步下一步安装部署web程序,并且同时要将IIS服务和mysql一同安装到服务器上,因为客户的电脑可能是 ...

  2. 发布.NET MVC网站 到Azure

    最近的项目部署在Microsoft Azure,学习了一些新东西,记录下. 1.账号. 用于登录portal(https://portal.azure.cn/),账号下有对应的Subscription ...

  3. 1.如何安装maven

    [确认]在CMD命令行中输入echo %JAVA_HOME%,查看JAVA_HOME是否配置.在CMD命令行中输入java -v,查看jdk是否正确安装.   [下载]从http://maven.ap ...

  4. 1.如何安装matlab2016a

    下载:见网盘 安装教程: 解压安装文件,安装文件为 iso 格式,但是不能通过虚拟光驱安装,需要将 iso 文件用解压软件解压.注意,R2016b_win64_dvd1.iso 和 R2016b_wi ...

  5. 异常:java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Workbook.getCellStyleAt

    背景 最近公司所有新项目要使用最新高效快速开发框架nature-framework,框架本身结合NatureMap已经集成excel的高效导入功能,我们要实现高性能的导出功能,因为最新的jxls-2. ...

  6. MySQL(一)--基本语法与常用语句

    将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合称为数据库(Database,DB). 将姓名.住址.电话号码.邮箱地址.爱好和家庭构成等数据保存到数据库中,就可以随时迅速获取想要的 ...

  7. css自定义动画在微信中无法执行的原因

    这是我去年年底遇到的一个问题, 在这个过程中我发现了一个比较有趣的问题. 我们在做抽奖的时候,微信分享到朋友圈的页面里,安卓机器无法执行页面中的自定义动画(元宝的位移,进入按钮的放大缩小等等).这让我 ...

  8. Codeforces Round #371 (Div. 2) 转换数字

    C. Sonya and Queries time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. Python的元类

    1.用元类验证子类 每当我们定义新类的时候,元类就会运行雅正代码,以确保这个新类符合规定的规范. Python系统把子类的class语句处理完毕,就会调用元类的 __new__ 方法.元类可以通过 _ ...

  10. Android - 多语言自动适配

    Android为多语言适配提供了很大的方便.开发者不需要在代码中进行修改.只需要配置xml文件. res --> values 其中存放有xml文件.一般这些都是英文的字符串.我们可以存放其他语 ...