比赛 聪明的工作员 评测结果 AWAAAAWAAAAWAAWAWAWA
题目名称 聪明的质监员 最终得分 70
用户昵称 Emine 运行时间 1.364 s
代码语言 C++ 内存使用 9.47 MiB
提交时间 2017-03-21 20:28:53
显示代码纯文本
  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<vector>
  4. #include<iostream>
  5. using namespace std;
  6. const long long maxn=200100;
  7. long long n,m,S,maxw;
  8. long long w[maxn],v[maxn],l[maxn],r[maxn],sum[maxn],cnt[maxn];
  9. long long ef(long long W)
  10. {
  11. for(long long i=1;i<=n;i++)
  12. {
  13. sum[i]=sum[i-1];
  14. cnt[i]=cnt[i-1];
  15. if(w[i]>=W)
  16. {
  17. sum[i]+=v[i];
  18. cnt[i]++;
  19. }
  20. }
  21. long long ans=0;
  22. for(long long i=1;i<=m;i++)
  23. ans+=(cnt[r[i]]-cnt[l[i]-1])*(sum[r[i]]-sum[l[i]-1]);
  24. return ans;
  25. }
  26. int main()
  27. {
  28. freopen("qc.in","r",stdin);
  29. freopen("qc.out","w",stdout);
  30. cin>>n>>m>>S;
  31. for(long long i=1;i<=n;i++)
  32. {
  33. cin>>w[i]>>v[i];
  34. maxw=max(maxw,w[i]);
  35. }
  36. for(long long i=1;i<=m;i++)
  37. {
  38. cin>>l[i]>>r[i];
  39. }
  40. long long l=0,r=maxw+1,mid;
  41. while(l<r-1)
  42. {
  43. mid=l+(r-l)/2;
  44. if(ef(mid)>S) l=mid;
  45. else r=mid;
  46. }
  47. cout<<abs(ef(l)-S);
  48. return 0;
  49. }