fork download
  1. program paletta; (*non funzionano come dovrebbero SOMMA E MODIFICA*)
  2. var N,i0 ,i,z, dimpari, dimdispari:Longint;
  3. V,pari, dispari, controllo: array of longint;
  4. n_ribaltamenti,numero_ribaltamenti, piccolidopo,maggioriprima,fuoriposto, ricordafuoriposto:int64;
  5. ordinabile: boolean;
  6.  
  7. function SOMMA(X:longint):int64;
  8. begin
  9. SOMMA:=0;
  10. while (X >= 0) do
  11. begin
  12.  
  13. SOMMA:=SOMMA+controllo[X];
  14. X := (X and (X+1)) -1;
  15. end
  16. end;
  17. Procedure modifica(X:longint; D:longint);
  18. begin
  19. while (X <D) do
  20. begin
  21. controllo[X]:=controllo[X]+1;
  22. X := X or (X+1);
  23. end
  24. end;
  25.  
  26. function paletta_sort(N: longint; V: array of longint): int64;
  27. begin
  28. if N mod 2 = 0 then begin dimpari:=N div 2; dimdispari:= dimpari; end
  29. else begin dimdispari:=N div 2 ; dimpari:= dimdispari+1; end;
  30. Setlength(pari, dimpari+1);
  31. Setlength(dispari, dimdispari+1);
  32. Setlength(controllo, N);
  33. for i:=0 to N-1 do if i mod 2 =0 then pari[i div 2 +1]:=V[i] div 2;
  34. for i:=0 to N-1 do if i mod 2 <> 0 then dispari[i div 2 +1 ]:=(V[i] -1) div 2 ;
  35.  
  36. ordinabile:=true;
  37. for z:=0 to N-1 do if V[z] mod 2 <> z mod 2 then begin ordinabile:=false; n_ribaltamenti:=-1; end;
  38. if ordinabile=true then begin
  39. for i:=0 to dimpari do controllo[i]:=0;
  40. n_ribaltamenti:=0; piccolidopo:=0;
  41. for i:=dimpari downto 1 do
  42. begin
  43. piccolidopo:=piccolidopo+somma(Pari[i]);
  44. modifica (pari[i], dimpari);
  45. end;
  46. n_ribaltamenti:=n_ribaltamenti+piccolidopo;
  47. for i:=0 to dimdispari do controllo[i]:=0;
  48. piccolidopo:=0;
  49. for i:=dimdispari downto 1 do
  50. begin
  51. piccolidopo:=piccolidopo+somma(Dispari[i]);
  52. modifica (dispari[i], dimdispari);
  53. end;
  54. n_ribaltamenti:=n_ribaltamenti+piccolidopo;
  55. end;
  56. paletta_sort:=n_ribaltamenti;
  57. end;
  58.  
  59.  
  60. begin
  61. (*assign(input, 'input.txt'); reset(input);
  62.   assign(output, 'output.txt'); rewrite(output);*)
  63. { Reading input }
  64. readln( N);
  65. Setlength(V, N);
  66. for i0 := 0 to N-1 do
  67. begin
  68. read(V[i0]);
  69. end;
  70.  
  71.  
  72. { Calling functions }
  73. numero_ribaltamenti := paletta_sort(N, V);
  74.  
  75. { Writing output }
  76. writeln(numero_ribaltamenti);
  77.  
  78. end.
  79.  
Success #stdin #stdout 0s 5316KB
stdin
5
0 1 2 3 4
stdout
0