$Luogu$

$Sol$

首先$W$一定是某个$w_i$.于是一种暴力方法就出炉了,枚举$W$再计算.

注意到,满足$S-Y$的绝对值最小的$Y$只可能是两种,一种是$<S$的最大的$Y$,一种是$>S$的最小的$Y$.那就分别求出来叭.分别求的时候这个$W$的值是可以二分的.但是这样并不能$A$掉这题,因为$check$的复杂度仍然是$O(NM)$的.看了题解之后发现$check$可以用前缀和吖,觉得很巧妙$qwq$.这样下来$check()$的复杂度变成$O(N+M).$

$Code$

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. #include<algorithm>
  6. #define il inline
  7. #define Rg register
  8. #define go(i,a,b) for(Rg int i=a;i<=b;++i)
  9. #define yes(i,a,b) for(Rg int i=a;i>=b;--i)
  10. #define mem(a,b) memset(a,b,sizeof(a))
  11. #define int long long
  12. #define db double
  13. #define inf 2147483647
  14. using namespace std;
  15. il int read()
  16. {
  17. Rg int x=0,y=1;char c=getchar();
  18. while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
  19. while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
  20. return x*y;
  21. }
  22. const int N=200010;
  23. int n,m,S,as,minw=inf,maxw,sn[N],sv[N];
  24. struct nd1{int w,v;}a[N];
  25. struct nd2{int l,r;}b[N];
  26. il int calc(int x)
  27. {
  28. Rg int ret=0;
  29. mem(sn,0);mem(sv,0);
  30. go(i,1,n)
  31. if(a[i].w>=x)sn[i]=sn[i-1]+1,sv[i]=sv[i-1]+a[i].v;
  32. else sn[i]=sn[i-1],sv[i]=sv[i-1];
  33. go(i,1,m)
  34. {
  35. Rg int l=b[i].l,r=b[i].r;
  36. ret+=(sn[r]-sn[l-1])*(sv[r]-sv[l-1]);
  37. }
  38. return ret;
  39. }
  40. il int ef1()
  41. {
  42. Rg int l=minw,r=maxw,mid,y,ret;
  43. while(l<=r)
  44. {
  45. mid=(l+r)>>1;
  46. y=calc(mid);
  47. if(y<=S)ret=y,r=mid-1;
  48. else l=mid+1;
  49. }
  50. return ret;
  51. }
  52. il int ef2()
  53. {
  54. Rg int l=minw,r=maxw,mid,y,ret;
  55. while(l<=r)
  56. {
  57. mid=(l+r)>>1;
  58. y=calc(mid);
  59. if(y>=S)ret=y,l=mid+1;
  60. else r=mid-1;
  61. }
  62. return ret;
  63. }
  64. main()
  65. {
  66. n=read(),m=read(),S=read();
  67. go(i,1,n)a[i]=(nd1){read(),read()},minw=min(minw,a[i].w),maxw=max(maxw,a[i].w);
  68. go(i,1,m)b[i]=(nd2){read(),read()};
  69. Rg int y1=ef1(),y2=ef2();
  70. as=min(abs(y1-S),abs(y2-S));
  71. printf("%lld\n",as);
  72. return 0;
  73. }

随机推荐

  1. K8s中Pod健康检查源代码分析

    了解k8s中的Liveness和Readiness Liveness: 表明是否容器正在运行.如果liveness探测为fail,则kubelet会kill掉容器,并且会触发restart设置的策略. ...

  2. 模板—tarjan缩点

    void tarjan(int x) { dfn[x]=++cnt;low[x]=cnt; vi[x]=; stack[++top]=x; for(rint i=f(x);i;i=n(i)) if(! ...

  3. 宝塔linux

    宝塔linux linux 定时任务管理

  4. OpenStack项目及组件功能简单介绍

    核心项目3个 1.控制台 服务名:Dashboard 项目名:Horizon 功能:web方式管理云平台,建云主机,分配网络,配安全组,加云盘 2.计算 服务名:计算 项目名:Nova 功能:负责响应 ...

  5. 如何使用jmeter调用soap协议

  6. laravel5.4 发送SMTP邮件

    https://blog.csdn.net/qq_35843527/article/details/77880631 Lumen / Laravel 5.4 使用网易邮箱 SMTP 发送邮件 获取网易 ...

  7. JS 动态表格

    表格 在script里面使用innerHTML获取标签体的内容,然后进行添加. 删除则是不断的获取父节点,利用父节点删除子节点. 在做这个的时候,要主要获取表格table的对象有两种方式,一是getE ...

  8. H3C 配置PAP验证

  9. Beta版是什么意思

    外部测试版的意思. 软件会出现三种版本 1.alpha内部测试版本,极不稳定,一般也不会出现的公众视线,仅供内部测试人员测试用. 2.beta公共测试版,就是对外发布软件的测试版,收集公众的意见和建议 ...

  10. Flex AIR应用拍照功能(Android和IOS版本)

    说明: 使用AIR处理拍照后的回调.照片文件的保存功能时,针对于IOS和Android两个平台是有所不同的. 但.关于如何调用摄像头进行拍照这个功能,Android和IOS是一致的. 技术实现: 1) ...