fork download
  1. program walkway;
  2. const MAXN=1000000;
  3. type elenco=array[0..MAXN] of Longint;
  4. var N,K,i:Longint;
  5. H : elenco;
  6.  
  7.  
  8. Procedure scambia (var a,b: Longint);
  9. var x:Longint;
  10. begin
  11. x:=a;
  12. a:=b;
  13. b:=x;
  14. end;
  15. Procedure ordinamento (estremoi,estremos: Longint; var v : elenco; ordinato:boolean);
  16. var inf, sup, medio:Longint;
  17. pivot :Longint;
  18. begin
  19. inf:=estremoi;
  20. sup:=estremos;
  21. medio:= (estremoi+estremos) div 2;
  22. pivot:=v[medio];
  23. repeat
  24. if (ordinato) then
  25. begin
  26. while (v[inf]<pivot) do inf:=inf+1;
  27. while (v[sup]>pivot) do sup:=sup-1;
  28. end;
  29. if inf<=sup then
  30. begin
  31. scambia(v[inf],v[sup]);
  32. inf:=inf+1;
  33. sup:=sup-1;
  34. end;
  35. until inf>sup;
  36. if (estremoi<sup) then ordinamento(estremoi,sup,v,ordinato);
  37. if (inf<estremos) then ordinamento(inf,estremos,v,ordinato);
  38. end;
  39.  
  40. function spread(N, K: longint; var H: elenco): longint;
  41. var w, diff, mindiff:Longint;
  42.  
  43. begin
  44. w:=0; mindiff:=1000005;
  45. while w<N-K+1 do
  46. begin
  47. diff:= H[w+K-1] -H[w];
  48. if diff<mindiff then mindiff:=diff;
  49. w:=w+1;
  50. end;
  51. spread := mindiff;
  52. end;
  53. begin
  54. readln(N, K);
  55. for i:=0 to N-1 do read(H[i]);
  56. readln;
  57. ordinamento (0,N-1,H, true);
  58. writeln(spread(N, K, H));
  59. end.
Success #stdin #stdout 0s 5304KB
stdin
10 3
67 90 22 79 95 89 76 21 65 99
stdout
6