记录编号 136625 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOIP 2011]聪明的质监员 最终得分 100
用户昵称 GravatarTA 是否通过 通过
代码语言 C++ 运行时间 0.220 s
提交时间 2014-11-03 13:33:30 内存使用 15.16 MiB
显示代码纯文本
  1. #include<iostream>
  2. using namespace std;
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<algorithm>
  7. #include<cstdio>
  8. int s[200001],t[200001],w[200001],v[200001];
  9. long long V[200001],sum[200001];
  10. char *ptr=new char[10000000];
  11. inline void in(int &x){
  12. while(*ptr<'0'||*ptr>'9')++ptr;
  13. x=0;
  14. while(*ptr>47&&*ptr<58)x=x*10+*ptr++-'0';
  15. }
  16. inline void in(long long &x){
  17. while(*ptr<'0'||*ptr>'9')++ptr;
  18. x=0;
  19. while(*ptr>47&&*ptr<58)x=x*10+*ptr++-'0';
  20. }
  21. int main(){
  22. freopen("qc.in","r",stdin),freopen("qc.out","w",stdout);
  23. fread(ptr,1,10000000,stdin);
  24. int n,M,i,l,r=0,m;
  25. long long S,ansl=0,ansr=0,ansm;
  26. in(n),in(M),in(S);
  27. for(i=1,++n;i<n;++i)
  28. in(w[i]),in(v[i]),r=max(r,w[i]);
  29. for(i=1;i<n;++i)
  30. V[i]=V[i-1]+v[i];
  31. for(i=0;i<M;++i){
  32. in(s[i]),in(t[i]);
  33. --s[i];
  34. ansl+=(t[i]-s[i])*(V[t[i]]-V[s[i]]);
  35. }
  36. l=1,++r;
  37. while(r-l>1){
  38. m=(l+r)>>1,ansm=0;
  39. for(i=1;i<n;++i)
  40. V[i]=V[i-1]+(w[i]>=m)*v[i];
  41. for(i=1;i<n;++i)
  42. sum[i]=sum[i-1]+(w[i]>=m);
  43. for(i=0;i<M;++i)
  44. ansm+=(V[t[i]]-V[s[i]])*(sum[t[i]]-sum[s[i]]);
  45. if(ansl>=S&&S>=ansm)
  46. r=m,ansr=ansm;
  47. if(ansm>=S&&S>=ansr)
  48. l=m,ansl=ansm;
  49. }
  50. printf("%lld",min(abs(S-ansl),abs(S-ansr)));
  51. return 0;
  52. }