fork(1) download
  1. program paletta;
  2. var N,i0 ,i, 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.  
  12. SOMMA:=SOMMA+controllo[X];
  13. X:=X-(X and -X);
  14. end
  15. end;
  16. Procedure modifica(X:longint; D:longint);
  17. begin
  18. while (X <D) do
  19. begin
  20.  
  21. controllo[X]:=controllo[X]+1;
  22. X:=X+(X and -X);
  23. end
  24. end;
  25.  
  26.  
  27.  
  28.  
  29. begin
  30. (*assign(input, 'input.txt'); reset(input);
  31.   assign(output, 'output.txt'); rewrite(output);*)
  32. { Reading input }
  33. readln( N);
  34. Setlength(V, N);
  35. for i0 := 0 to N-1 do
  36. begin
  37. read(V[i0]);
  38. end;
  39. readln;
  40. if N mod 2 = 0 then begin dimpari:=N div 2; dimdispari:= dimpari; end
  41. else begin dimdispari:=N div 2 ; dimpari:= dimdispari +1; end;
  42. Setlength(pari, dimpari);
  43. Setlength(dispari, dimdispari);
  44. Setlength(controllo, N);
  45. for i:=0 to N do controllo[i]:=0;
  46. for i:=0 to N -1 do if i mod 2 =0 then pari[i div 2]:=V[i] div 2 ;
  47. for i:=0 to N -1 do if i mod 2 <> 0 then dispari[i div 2]:=(V[i] -1) div 2 ;
  48. for i:= 0 to dimpari-1 do write(pari[i]); writeln;
  49. for i:= 0 to dimdispari-1 do write(dispari[i]); writeln;
  50. i:=1; numero_ribaltamenti:=0;
  51. while i<dimpari do
  52. begin
  53.  
  54. piccolidopo:=0; maggioriprima:=0; fuoriposto:=0;
  55. modifica (i, dimpari);
  56.  
  57. piccolidopo:=pari[i]-somma(pari[i]);
  58. maggioriprima:=i-pari[i]+piccolidopo;
  59. fuoriposto:=maggioriprima+piccolidopo;
  60. write (somma(pari[i]),' ',piccolidopo,' ', maggioriprima,' ',fuoriposto,' ');
  61. writeln;
  62. numero_ribaltamenti:=numero_ribaltamenti+fuoriposto;
  63. i:=i+1;
  64. end;
  65. i:=1;
  66. for i:=0 to N do controllo[i]:=0;
  67. while i<dimdispari do
  68. begin
  69.  
  70. piccolidopo:=0; maggioriprima:=0; fuoriposto:=0;
  71. modifica (i, dimdispari);
  72.  
  73. piccolidopo:=dispari[i]-somma(dispari[i]);
  74. maggioriprima:=i-dispari[i]+piccolidopo;
  75. fuoriposto:=maggioriprima+piccolidopo;
  76. write (somma(dispari[i]),' ',piccolidopo,' ', maggioriprima,' ',fuoriposto,' ');
  77. writeln;
  78. numero_ribaltamenti:=numero_ribaltamenti+fuoriposto;
  79. i:=i+1;
  80. end;
  81. writeln(numero_ribaltamenti);
  82. end.
  83.  
Success #stdin #stdout 0.01s 5328KB
stdin
6
2 3 0 5 4 1
stdout
102
120
0 0 1 1 
2 0 0 0 
1