记录编号 465513 评测结果 AAAAAAAAAAAA
题目名称 售票系统 最终得分 100
用户昵称 GravatarWHZ0325 是否通过 通过
代码语言 C++ 运行时间 0.166 s
提交时间 2017-10-27 10:24:16 内存使用 0.86 MiB
显示代码纯文本
  1. #include <cstdio>
  2. #include <algorithm>
  3. using namespace std;
  4. const int inf=2147483647;
  5. int st[150000];
  6. void build(int o,int l,int r,int x) {
  7. st[o]=x;
  8. if(l==r) {
  9. return;
  10. }
  11. else {
  12. int mid=(l+r)>>1;
  13. build(o*2+1,l,mid,x);
  14. build(o*2+2,mid+1,r,x);
  15. }
  16. }
  17. int query(int o,int l,int r,int ql,int qr) {
  18. int ans=inf;
  19. if(ql<=l&&r<=qr) {
  20. return st[o];
  21. }
  22. else {
  23. int mid=(l+r)>>1;
  24. if(st[o]<min(st[o*2+1],st[o*2+2])) {
  25. int lazy=min(st[o*2+1],st[o*2+2])-st[o];
  26. st[o*2+1]-=lazy;
  27. st[o*2+2]-=lazy;
  28. }
  29. if(ql<=mid) {
  30. ans=min(ans,query(o*2+1,l,mid,ql,qr));
  31. }
  32. if(mid+1<=qr) {
  33. ans=min(ans,query(o*2+2,mid+1,r,ql,qr));
  34. }
  35. }
  36. return ans;
  37. }
  38. void update(int o,int l,int r,int ql,int qr,int x) {
  39. if(ql<=l&&r<=qr) {
  40. st[o]-=x;
  41. }
  42. else {
  43. int mid=(l+r)>>1;
  44. if(st[o]<min(st[o*2+1],st[o*2+2])) {
  45. int lazy=min(st[o*2+1],st[o*2+2])-st[o];
  46. st[o*2+1]-=lazy;
  47. st[o*2+2]-=lazy;
  48. }
  49. if(ql<=mid) {
  50. update(o*2+1,l,mid,ql,qr,x);
  51. }
  52. if(mid+1<=qr) {
  53. update(o*2+2,mid+1,r,ql,qr,x);
  54. }
  55. st[o]=min(st[o*2+1],st[o*2+2]);
  56. }
  57. }
  58. int main() {
  59. freopen("railway.in","r",stdin);
  60. freopen("railway.out","w",stdout);
  61. int c,s,r;
  62. scanf("%d%d%d",&c,&s,&r);
  63. build(0,1,c,s);
  64. int o,d,n;
  65. while(r--) {
  66. scanf("%d%d%d",&o,&d,&n);
  67. int out=query(0,1,c,o,d-1);
  68. if(out<n) {
  69. printf("NO\n");
  70. }
  71. else {
  72. update(0,1,c,o,d-1,n);
  73. printf("YES\n");
  74. }
  75. }
  76. fclose(stdin);
  77. fclose(stdout);
  78. return 0;
  79. }