fork download
  1. program sushi;
  2. const MAXN=100000;
  3. type piatto = record
  4. inizio:longint;
  5. durata:longint;
  6. peso:longint;
  7. fine:longint;
  8. end;
  9. elenco = array[0.. MAXN-1] of Longint;
  10. table = array[0..MAXN-1] of piatto;
  11. var N,i:Longint;
  12. T : table;
  13. S,W,D,E, ricordaindice:elenco; (*array riferiti ai piatti Start, Weigth, Durata, End*)
  14.  
  15. Procedure scambia (var a,b: longint);
  16. var x:longint;
  17. begin
  18. x:=a;
  19. a:=b;
  20. b:=x;
  21. end;
  22.  
  23. Procedure ordinamento (estremoi,estremos: longint; var v : elenco; var u:elenco; ordinato:boolean);
  24. var inf, sup, medio:longint;
  25. pivot :longint;
  26. begin
  27. inf:=estremoi;
  28. sup:=estremos;
  29. medio:= (estremoi+estremos) div 2;
  30. pivot:=v[medio];
  31. repeat
  32. if (ordinato) then
  33. begin
  34. while (v[inf]<pivot) do inf:=inf+1;
  35. while (v[sup]>pivot) do sup:=sup-1;
  36. end;
  37. if inf<=sup then
  38. begin
  39. scambia(v[inf],v[sup]);
  40. scambia(u[inf],u[sup]);
  41. inf:=inf+1;
  42. sup:=sup-1;
  43. end;
  44. until inf>sup;
  45. if (estremoi<sup) then ordinamento(estremoi,sup,v,u,ordinato);
  46. if (inf<estremos) then ordinamento(inf,estremos,v,u,ordinato);
  47. end;
  48.  
  49. begin
  50. readln(N);
  51. for i:=0 to N-1 do ricordaindice[i]:=i;
  52. for i:=0 to N-1 do
  53. begin
  54. { dish on table }
  55. readln(S[i],W[i],D[i]);
  56. E[i]:=S[i]+D[i];
  57. T[i].inizio:=S[i];
  58. T[i].durata:=D[i];
  59. T[i].peso:=W[i];
  60. T[i].fine:=E[i];
  61. end;
  62. ordinamento(0,N-1,E, ricordaindice,true);
  63. for i:=0 to N-1 do write(E[i],' ',ricordaindice[i],' ');writeln;
  64.  
  65.  
  66. end.
  67.  
Success #stdin #stdout 0s 5320KB
stdin
4
8 2 5
7 6 2
2 7 5
4 4 3
stdout
7 2 7 3 9 1 13 0