P1314-聪明的质检员

古城微笑少年丶 2023-06-01 08:47 128阅读 0赞
  1. 1 #include <bits/stdc++.h>
  2. 2 using namespace std;
  3. 3 #define _for(i,a,b) for(int i = (a);i < b;i ++)
  4. 4 #define _rep(i,a,b) for(int i = (a);i > b;i --)
  5. 5 #define INF 0x3f3f3f3f3f3f3f3f
  6. 6 #define pb push_back
  7. 7 #define maxn 2005390
  8. 8 typedef long long ll;
  9. 9
  10. 10 inline ll read()
  11. 11 {
  12. 12 ll ans = 0;
  13. 13 char ch = getchar(), last = ' ';
  14. 14 while(!isdigit(ch)) last = ch, ch = getchar();
  15. 15 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
  16. 16 if(last == '-') ans = -ans;
  17. 17 return ans;
  18. 18 }
  19. 19 inline void write(ll x)
  20. 20 {
  21. 21 if(x < 0) x = -x, putchar('-');
  22. 22 if(x >= 10) write(x / 10);
  23. 23 putchar(x % 10 + '0');
  24. 24 }
  25. 25 ll n,m,S;
  26. 26 ll w[maxn],v[maxn];
  27. 27 ll L[maxn],R[maxn];
  28. 28 ll pren[maxn],preV[maxn];
  29. 29 ll rnt = INF;
  30. 30 //ll MIN = INF,MAX = 0;
  31. 31 bool C(ll d)
  32. 32 {
  33. 33 ll ans = 0;
  34. 34 _for(i,1,n+1)
  35. 35 if(w[i]>=d)
  36. 36 pren[i] = pren[i-1]+1,preV[i] = preV[i-1]+v[i];
  37. 37 else
  38. 38 pren[i] = pren[i-1],preV[i] = preV[i-1];
  39. 39
  40. 40 _for(i,1,m+1)
  41. 41 ans += (pren[R[i]]-pren[L[i]-1])*(preV[R[i]]-preV[L[i]-1]);
  42. 42 rnt = min(rnt,llabs(ans-S));
  43. 43 if(ans > S)
  44. 44 return true;
  45. 45 return false;
  46. 46 }
  47. 47 ll solve()
  48. 48 {
  49. 49 ll lb = 0,ub = INF;
  50. 50 while(lb < ub)
  51. 51 {
  52. 52 ll mid = lb+(ub-lb)/2;
  53. 53 memset(pren,0,sizeof(pren));
  54. 54 memset(preV,0,sizeof(preV));
  55. 55 if(C(mid)) lb = mid+1;
  56. 56 else ub = mid;
  57. 57 }
  58. 58 return rnt;
  59. 59 }
  60. 60 int main()
  61. 61 {
  62. 62 // freopen("testdata.in","r+",stdin);
  63. 63 n = read(),m = read(),S = read();
  64. 64 _for(i,1,n+1)
  65. 65 {
  66. 66 w[i] = read();
  67. 67 v[i] = read();
  68. 68 // MAX = max(MAX,w[i]);
  69. 69 // MIN = min(MIN,w[i]);
  70. 70 }
  71. 71 _for(i,1,m+1)
  72. 72 {
  73. 73 L[i] = read();
  74. 74 R[i] = read();
  75. 75 }
  76. 76 write(solve());
  77. 77 return 0;
  78. 78 }

转载于:https://www.cnblogs.com/Asurudo/p/11614956.html

发表评论

表情:
评论列表 (有 0 条评论,128人围观)

还没有评论,来说两句吧...

相关阅读

    相关 聪明KK【ACM】

    聪明的kk时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 聪明的“KK” 非洲某国展馆的设计灵感源于富有传奇色彩的沙漠中陡然起伏的沙

    相关 cmdn(聪明女人)

    如何学习Android开发? 你会java吗?如果不会请先学习java android开发是基于java的,没有java的基础基本上很难。会java语法.看的懂oop(面