fork download
  1. program paletta;
  2. var N,i0 ,i, z, dimpari, dimdispari:Longint;
  3. V,P,pari, dispari, controllo: array of longint;
  4. numero_ribaltamenti, piccolidopo,maggioriprima,fuoriposto:int64;
  5.  
  6. function SOMMA(X:longint):int64;
  7. begin
  8. SOMMA:=0;
  9. while (X > 0) do
  10. begin
  11. SOMMA:=SOMMA+controllo[X];
  12. X:= X- (X and (X+1)) -1 ;
  13. end
  14. end;
  15. Procedure modifica(X:longint; D:longint);
  16. begin
  17. while (X <=D) do
  18. begin
  19. controllo[X]:=controllo[X]+1;
  20. X:=X +(X OR X+1);
  21. end
  22. end;
  23.  
  24.  
  25.  
  26.  
  27. begin
  28. (*assign(input, 'input.txt'); reset(input);
  29.   assign(output, 'output.txt'); rewrite(output);*)
  30. { Reading input }
  31. readln( N);
  32. Setlength(V, N);
  33. for i0 := 0 to N-1 do
  34. begin
  35. read(V[i0]);
  36. end;
  37. readln;
  38. if N mod 2 = 0 then begin dimpari:=N div 2; dimdispari:= dimpari; end
  39. else begin dimdispari:=N div 2 ; dimpari:= dimdispari +1; end;
  40. Setlength(pari, dimpari);
  41. Setlength(dispari, dimdispari);
  42. Setlength(controllo, N);
  43. for i:=0 to N do controllo[i]:=0;
  44. for i:=0 to N -1 do if i mod 2 =0 then pari[i div 2]:=V[i] div 2 ;
  45. for i:=0 to N -1 do if i mod 2 <> 0 then dispari[i div 2]:=(V[i] -1) div 2 ;
  46. for i:= 0 to dimpari-1 do write(pari[i]); writeln;
  47. for i:= 0 to dimdispari-1 do write(dispari[i]); writeln;
  48. for z := 0 to N-1 do
  49. if (V[z] mod 2 <> z mod 2) then begin writeln(-1) ; exit; end;
  50.  
  51. i:=0;
  52. while i<=dimpari do
  53. begin
  54. piccolidopo:=0; maggioriprima:=0; fuoriposto:=0;
  55. modifica (controllo[i],N);
  56. piccolidopo:=pari[i]-somma(pari[i]);
  57. maggioriprima:=i-pari[i]+piccolidopo;
  58. fuoriposto:=maggioriprima+piccolidopo;
  59.  
  60. i:=i+1;
  61. end;
  62. write (fuoriposto,' ');
  63. end.
  64.  
Success #stdin #stdout 0s 5316KB
stdin
5
2 1 4 3 0
stdout
120
01
3