fork download
  1. program ideone;
  2.  
  3. Const smax = 99;
  4. Type simple = array[0..smax] of smallint;
  5. Var data, sort, res:simple; i, n:smallint;
  6.  
  7. procedure writeArr(arr:simple; n:smallint);
  8. Var i:smallint;
  9. begin
  10. for i:=0 to n do write(arr[i], ' ');
  11. writeln();
  12. end;
  13.  
  14. procedure delInArr(Var arr:simple; pos:smallint);
  15. Var i:smallint; tArr:simple;
  16. begin
  17. for i:=0 to pos-1 do tArr[i]:=arr[i];
  18. for i:=pos to smax do tArr[i]:=arr[i+1];
  19. arr:=tArr;
  20. end;
  21.  
  22. procedure insInArr(Var arr:simple; pos, e:smallint);
  23. Var i:smallint; tArr:simple;
  24. begin
  25. for i:=0 to pos-1 do tArr[i]:=arr[i];
  26. tArr[pos]:=e;
  27. for i:=pos+1 to smax do tArr[i]:=arr[i+1];
  28. arr:=tArr;
  29. end;
  30.  
  31. function bubbleSort(arr:simple; n:smallint):simple;
  32. Var i, j, t:smallint;
  33. begin
  34. for i:=0 to n-1 do
  35. for j:=0 to n-1 do
  36. if arr[j]<arr[j+1] then begin
  37. t:=arr[j];
  38. arr[j]:=arr[j+1];
  39. arr[j+1]:=t;
  40. end;
  41. bubbleSort:=arr;
  42. end;
  43.  
  44. function isSame(arr:simple; num, lim:smallint):boolean;
  45. Var i:smallint; same:boolean;
  46. begin
  47. same:=False;
  48. i:=0;
  49. while (same<>True) and (i<=lim) do begin
  50. writeln('DEBAG: num = ', num, ', lim = ', lim);
  51. if arr[i]=num then same:=True;
  52. i:=i+1;
  53. end;
  54. isSame:=same;
  55. end;
  56.  
  57. function findIndexMax(main, forbidden:simple; lim:smallint):smallint;
  58. Var i, index:smallint;
  59. begin
  60. index:=0;
  61. for i:=0 to n do
  62. if (main[index]<main[i]) and (isSame(forbidden, i, lim)=False) then
  63. index:=i;
  64. writeln('DEBAG: index = ', index);
  65. findIndexMax:=index;
  66. end;
  67.  
  68. function converter(mainA:simple):simple;
  69. Var i:smallint; res:simple;
  70. begin
  71. for i:=0 to n do begin
  72. res[i]:=findIndexMax(mainA, res, i-1);
  73. end;
  74. converter:=res;
  75. end;
  76.  
  77. begin
  78. read(n);
  79. n:=n-1;
  80. for i:=0 to n do read(data[i]);
  81. res:=converter(data);
  82. writeArr(res, n);
  83. end.
Success #stdin #stdout 0.01s 5280KB
stdin
6
11 13 12 15 14 11
stdout
DEBAG: index = 3
DEBAG: num = 1, lim = 0
DEBAG: num = 3, lim = 0
DEBAG: num = 4, lim = 0
DEBAG: index = 4
DEBAG: num = 1, lim = 1
DEBAG: num = 1, lim = 1
DEBAG: num = 3, lim = 1
DEBAG: num = 4, lim = 1
DEBAG: num = 4, lim = 1
DEBAG: index = 1
DEBAG: num = 1, lim = 2
DEBAG: num = 1, lim = 2
DEBAG: num = 1, lim = 2
DEBAG: num = 2, lim = 2
DEBAG: num = 2, lim = 2
DEBAG: num = 2, lim = 2
DEBAG: num = 3, lim = 2
DEBAG: num = 4, lim = 2
DEBAG: num = 4, lim = 2
DEBAG: index = 2
DEBAG: num = 1, lim = 3
DEBAG: num = 1, lim = 3
DEBAG: num = 1, lim = 3
DEBAG: num = 2, lim = 3
DEBAG: num = 2, lim = 3
DEBAG: num = 2, lim = 3
DEBAG: num = 2, lim = 3
DEBAG: num = 3, lim = 3
DEBAG: num = 4, lim = 3
DEBAG: num = 4, lim = 3
DEBAG: index = 0
DEBAG: num = 1, lim = 4
DEBAG: num = 1, lim = 4
DEBAG: num = 1, lim = 4
DEBAG: num = 2, lim = 4
DEBAG: num = 2, lim = 4
DEBAG: num = 2, lim = 4
DEBAG: num = 2, lim = 4
DEBAG: num = 3, lim = 4
DEBAG: num = 4, lim = 4
DEBAG: num = 4, lim = 4
DEBAG: index = 0
3 4 1 2 0 0