Advertisement
ArinaRaguzina

Untitled

Dec 21st, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. program task3;
  2.  
  3. type
  4. Tnode = record
  5. index, NData: integer;
  6. end;
  7. var
  8. size, maxSize: integer;
  9. head, tail: integer;
  10. Datamax,datamin: array of tnode;
  11. ans: tnode;
  12. n, i, k, d, t, prov: integer;
  13. m, min: array [1..1000] of integer;
  14.  
  15. procedure newArrayQueue(maxSize: integer);
  16. begin
  17. SetLength(Datamax, maxSize);
  18. head := -1;
  19. size := 0;
  20. tail := -1;
  21.  
  22. end;
  23.  
  24. function pushData(DData, index: integer): boolean;
  25. begin
  26. if size = maxsize then
  27. exit(False);
  28.  
  29. head := head mod maxSize;
  30. Datamax[head].ndata:= DData;
  31. Datamax[head].index := index;
  32. size += 1;
  33. end;
  34.  
  35. function popDatahead(): boolean;
  36. begin
  37. if (size = 0) then
  38. exit(False);
  39. size -= 1;
  40. head := head mod maxsize + 1;
  41. end;
  42.  
  43. function popDatatail(): boolean;
  44. begin
  45. if (size = 0) then
  46. exit(False);
  47. size -= 1;
  48. tail := tail mod maxsize - 1;
  49. end;
  50.  
  51. function getData(): integer;
  52. begin
  53. exit(Datamax[tail].ndata);
  54. end;
  55.  
  56.  
  57. begin
  58.  
  59. Assign(input, 'input.txt');
  60. Assign(output, 'output.txt');
  61. reset(input);
  62. rewrite(output);
  63. readln(n, k);
  64. newArrayQueue(n + 2);
  65. t := 2;
  66. for i := 1 to n do
  67. begin
  68. Read(m[i]);
  69. end;
  70. pushdata( m[i], 1);
  71. Write(m[1]);
  72. min[1] := m[1];
  73. for i := 2 to n do
  74. begin
  75. d := m[i];
  76. while (size > 0) and (head < d) do
  77. PopDataHead();
  78. // while (p1^.size > 0) and (p1^.head > d) do
  79. // PopDataHead(p1);
  80. if size = 0 then
  81. begin
  82. head := 0;
  83. tail := 0;
  84. end;
  85. //if p1^.size = 0 then
  86. // begin
  87. // p1^.head := 0;
  88. // p1^.tail := 0;
  89. // end;
  90. PushData(m[i], i);
  91. // PushData(p1, m[i], i);
  92. if Datamax[tail].index < (i - k + 1) then
  93. PopDataTail();
  94. // if p1^.Data[p^.tail].index < (i - k + 1) then
  95. // PopDataTail(p1);
  96. prov := GeTdata();
  97. Write(GeTdata());
  98. min[t] := GeTdata();
  99. t += 1;
  100. end;
  101. t -= 1;
  102. if m[n - 1] > m[n] then
  103. Write(m[n - 1])
  104. else
  105. Write(m[n]);
  106. Write(m[n]);
  107. { if m[n - 1] < m[n] then
  108. min[t + 1] := m[n - 1]
  109. else
  110. min[t + 1] := m[n];
  111. min[t + 2] := m[n];
  112. writeln;
  113. for i := 1 to t + 2 do
  114. begin
  115. Write(min[i]);
  116. end;}
  117. Close(input);
  118. Close(output);
  119. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement