ArinaRaguzina

Untitled

Dec 6th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. program k;
  2.  
  3. type
  4. PListQueue = ^TListQueue;
  5.  
  6. PListNode = ^TListNode;
  7.  
  8. TListQueue = record
  9. head: PListNode;
  10. tail: PListNode;
  11. size: int64;
  12. end;
  13.  
  14. TListNode = record
  15. Next: PListNode;
  16. Data: int64;
  17. end;
  18.  
  19. function newListQueue(): PListQueue;
  20. var
  21. p: PListQueue;
  22. begin
  23. New(p);
  24. if (p = nil) then
  25. exit(nil);
  26. p^.head := nil;
  27. p^.tail := nil;
  28. p^.size := 0;
  29. exit(p);
  30. end;
  31.  
  32. function pushData(Queue: PListQueue; const Data: int64): boolean;
  33. var
  34. node: plistnode;
  35. begin
  36. new(node);
  37. if (node = nil) then
  38. exit(False);
  39. node^.Next := nil;
  40. node^.Data := Data;
  41. if (queue^.tail <> nil) then
  42. Queue^.tail^.Next := node;
  43. Queue^.tail := node;
  44. if Queue^.head = nil then
  45. Queue^.head := Queue^.tail;
  46.  
  47. queue^.size += 1;
  48. exit(True);
  49. end;
  50.  
  51. function popData(Queue: PListQueue): boolean;
  52. var
  53. node: plistnode;
  54. begin
  55. if (queue^.size = 0) or (queue^.head = nil) then
  56. exit(False);
  57. node := Queue^.head;
  58. Queue^.head := Queue^.head^.Next;
  59. dispose(node);
  60. Queue^.size -= 1;
  61. exit(True);
  62. end;
  63.  
  64. function getData(Queue: PListQueue): int64;
  65. begin
  66. exit(queue^.head^.Data);
  67. end;
  68.  
  69. function getSize(const Queue: PListQueue): int64;
  70. begin
  71. exit(queue^.size);
  72. end;
  73.  
  74. var
  75. tmax, t, n, a, b, tm, i, maxsize, a1, ii: integer;
  76. p: PListQueue;
  77. begin
  78. Assign(input, 'input.txt');
  79. Assign(output, 'output.txt');
  80. reset(input);
  81. rewrite(output);
  82. Read(tmax, n);
  83. Read(a, b);
  84. p := newListQueue();
  85. pushdata(p, a + b);
  86. for i := 2 to n do
  87. begin
  88. Read(a, b);
  89. if a > p^.tail^.Data then
  90. pushdata(p, a + b)
  91. else
  92. pushdata(p, (getdata(p) + b));
  93. while (a >= getdata(p)) do
  94. begin
  95. popdata(p);
  96. end;
  97. if getSize(p) -1> maxsize then
  98. begin
  99. maxsize := getSize(p)-1;
  100. ii := i;
  101. end;
  102. if p^.tail^.Data >= tmax then
  103. break;
  104. end;
  105. if p^.tail^.Data >= tmax then
  106. begin
  107. tm := tmax;
  108. if ii = i then
  109. maxsize += n - i;
  110. end
  111. else
  112. tm := p^.tail^.Data;
  113. Write(maxsize, ' ', tm);
  114. Close(input);
  115. Close(output);
  116. end.
Advertisement
Add Comment
Please, Sign In to add comment