Advertisement
regergr

Untitled

Jan 16th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. program Project1;
  2.  
  3. type
  4. TData = record
  5. x, i: integer;
  6. end;
  7.  
  8. TDec = record
  9. head: dword;
  10. tail: dword;
  11. size: dword;
  12. maxsize: dword;
  13. data: array of TData;
  14. end;
  15.  
  16. procedure Create_Dec(var d: TDec; maxsize: dword);
  17. begin
  18. SetLength(d.data, maxsize);
  19. d.size := 0;
  20. d.tail := 0;
  21. d.head := 0;
  22. d.maxsize := maxsize;
  23. end;
  24.  
  25. function Push_Dec(var d: TDec; data: TData): boolean;
  26. begin
  27. d.data[(d.head + d.size) mod d.maxsize] := data;
  28. d.size += 1;
  29. if (d.size = 1) then
  30. d.tail := d.head
  31. else
  32. d.tail += 1;
  33.  
  34. end;
  35. function Pop_head(var d:TDec): boolean;
  36. begin
  37. d.head += 1;
  38. if (d.head > d.maxsize) then begin
  39. d.head := 0;
  40. end;
  41. d.size -= 1;
  42.  
  43. end;
  44.  
  45. function Pop_tail(var d:TDec): boolean;
  46. begin
  47. if (d.tail < 0) then begin
  48. d.tail := d.maxsize-1;
  49. end;
  50. d.size -= 1;
  51. d.tail -= 1;
  52. end;
  53.  
  54. function Del_dec(var d:TDec): boolean;
  55. begin
  56. if (d.size > 0) then begin
  57. finalize(d.data);
  58. end else begin
  59. exit(false);
  60. end;
  61. end;
  62.  
  63. type
  64. TArray = array of integer;
  65.  
  66. procedure Find_max(n, k: integer; arr: TArray);
  67.  
  68. var d:TDec;
  69. data: TData;
  70. i: integer;
  71. num: Tdata;
  72. begin
  73. Create_dec(d, n);
  74. data.x := arr[1];
  75. data.i := 1;
  76. Push_dec(d, data);
  77. write(data.x, ' ');
  78. for i:=2 to n do begin
  79. num.x := arr[i];
  80. num.i := i;
  81. while (d.size > 0) and (d.data[d.tail].x < num.x) do begin
  82. Pop_tail(d);
  83. end;
  84. Push_dec(d, num);
  85. if (d.data[d.head].i < i-k) then begin
  86. Pop_head(d);
  87. end;
  88. write(d.data[d.head].x, ' ');
  89. end;
  90. end;
  91. procedure Find_min(n, k: integer; arr: TArray);
  92. var d:TDec;
  93. data: TData;
  94. i: integer;
  95. num: Tdata;
  96. begin
  97. Create_dec(d, n);
  98. data.x := arr[1];
  99. data.i := 1;
  100. Push_dec(d, data);
  101. write(data.x, ' ');
  102. for i:=2 to n do begin
  103. num.x := arr[i];
  104. num.i := i;
  105. while (d.size > 0) and (d.data[d.tail].x > num.x) do begin
  106. Pop_tail(d);
  107. end;
  108. Push_dec(d, num);
  109. if (d.data[d.head].i < i-k) then begin
  110. Pop_head(d);
  111. end;
  112. write(d.data[d.head].x, ' ');
  113. end;
  114. end;
  115.  
  116. var
  117. k, n, i: integer;
  118. arr: array of integer;
  119. begin
  120. assign(input, 'input2.txt');
  121. assign(output, 'output.txt');
  122. reset(input);
  123. rewrite(output);
  124. SetLength(arr, 1000000);
  125. for i := 0 to 1000000- 1 do begin
  126. arr[i] := random(100);
  127. end;
  128. k := 3;
  129. //readln(n, k);
  130. //SetLength(arr, n);
  131. //for i:=1 to n do begin
  132. // read(arr[i]);
  133. //end;
  134. Find_max(1000000 - 1, 100000, arr);
  135. writeln;
  136. writeln;
  137. writeln;
  138. writeln;
  139. writeln;
  140.  
  141. Find_min(1000000 - 1, 100000+, arr);
  142. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement