比赛 聪明的工作员 评测结果 AAAAWWWWAWAWWWWWWWWW
题目名称 聪明的质监员 最终得分 30
用户昵称 玉带林中挂 运行时间 0.474 s
代码语言 C++ 内存使用 6.42 MiB
提交时间 2017-03-21 20:51:49
显示代码纯文本
  1. #include<cstdlib>
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5. using namespace std;
  6. int n,m;
  7. long long S,Y;
  8. long long ans;
  9. int l[200010],r[200010],w[200010],y[200010];
  10. long long s[200010],d[200010];
  11. long long Abs(long long x,long long y)
  12. {
  13. if (x>y) return (x-y);
  14. else return (y-x);
  15. }
  16.  
  17. int Main()
  18. {
  19. long long left=0,right=0,mid;
  20. ans=100;ans*=100000;
  21. for (int i=1;i<=n;i++)
  22. if (w[i]>right) right=w[i];
  23. right+=100;
  24. while (left<right)
  25. {
  26. mid=(left+right)/2;
  27. memset(s,0,sizeof(s));
  28. memset(d,0,sizeof(d));
  29. for (int i=1;i<=n;i++)
  30. if (w[i]>=mid) s[i]=s[i-1]+y[i],d[i]=d[i-1]+1;
  31. else s[i]=s[i-1],d[i]=d[i-1];Y=0;
  32. for (int i=1;i<=m;i++)
  33. {
  34. long long temp_x=s[r[i]]-s[l[i]-1];
  35. long long temp_y=d[r[i]]-d[l[i]-1];
  36. long long temp_z=temp_x*temp_y;
  37. Y+=temp_z;
  38. }
  39. if (Abs(Y,S)<ans)
  40. ans=Abs(Y,S);
  41. if (Y>S)
  42. left=mid+1;
  43. else right=mid;
  44. }
  45. cout<<ans;
  46. }
  47. int main()
  48. {
  49. freopen("qc.in","r",stdin);
  50. freopen("qc.out","w",stdout);
  51. cin>>n>>m>>S;
  52. for (int i=1;i<=n;i++)
  53. scanf("%d%d",&w[i],&y[i]);
  54. for (int i=1;i<=m;i++)
  55. scanf("%d%d",&l[i],&r[i]);
  56. Main();
  57. fclose(stdin);
  58. fclose(stdout);
  59. return 0;
  60. }
  61.  
  62.