记录编号 95714 评测结果 AAAAAAAAAA
题目名称 [JSOI 2007] 建筑抢修 最终得分 100
用户昵称 GravatarOIdiot 是否通过 通过
代码语言 C++ 运行时间 0.140 s
提交时间 2014-04-08 13:16:09 内存使用 1.46 MiB
显示代码纯文本
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <queue>
  4. #include <cstring>
  5. #include <algorithm>
  6. #define MAXN 150010
  7. #define SpeedUp ios::sync_with_stdio(false)
  8. #define FILE
  9. using namespace std;
  10.  
  11. struct Building{
  12. int Begin,End;
  13. friend bool operator < (Building A,Building B){
  14. return A.End<B.End;
  15. }
  16. };
  17.  
  18. Building T[MAXN];
  19. priority_queue<int> Q;
  20. int N,Ans;
  21.  
  22. void init()
  23. {
  24. SpeedUp;
  25. #ifdef FILE
  26. freopen("repair.in","r",stdin);
  27. freopen("repair.out","w",stdout);
  28. #endif
  29. cin>>N;
  30. for(int i=1;i<=N;i++)
  31. cin>>T[i].Begin>>T[i].End;
  32. sort(T+1,T+N+1);
  33. Ans=0;
  34. }
  35.  
  36. void work()
  37. {
  38. int tmp=0;
  39. for(int i=1;i<=N;i++)
  40. {
  41. if(T[i].Begin+tmp<=T[i].End)
  42. {
  43. Q.push(T[i].Begin);
  44. tmp+=T[i].Begin;
  45. Ans++;
  46. }
  47. else if(T[i].Begin<Q.top() && T[i].Begin+tmp-Q.top()<=T[i].End)
  48. {
  49. tmp-=Q.top()-T[i].Begin;
  50. Q.pop();
  51. Q.push(T[i].Begin);
  52. }
  53. }
  54. cout<<Ans<<endl;
  55. }
  56.  
  57. int main()
  58. {
  59. init();
  60. work();
  61. return 0;
  62. }
  63.