program paletta; (*non funzionano come dovrebbero SOMMA E MODIFICA*)
var N,i0 ,i,z, dimpari, dimdispari:Longint;
V,pari, dispari, controllo: array of longint;
n_ribaltamenti,numero_ribaltamenti, piccolidopo,maggioriprima,fuoriposto, ricordafuoriposto:int64;
ordinabile: boolean;
function SOMMA(X:longint):int64;
begin
SOMMA:=0;
while (X > 0) do
begin
SOMMA:=SOMMA+controllo[X];
X:=X-(X and -X);
end
end;
Procedure modifica(X:longint; D:longint);
begin
while (X <=D) do
begin
controllo[X]:=controllo[X]+1;
X:=X + (X or X+1);
end
end;
function paletta_sort(N: longint; V: array of longint): int64;
begin
if N mod 2 = 0 then begin dimpari:=N div 2; dimdispari:= dimpari; end
else begin dimdispari:=N div 2 ; dimpari:= dimdispari+1; end;
Setlength(pari, dimpari);
Setlength(dispari, dimdispari);
Setlength(controllo, N);
for i:=N-1 downto 0 do if i mod 2 =0 then pari[i div 2+1 ]:=V[i] div 2;
for i:=N-1 downto 0 do if i mod 2 <> 0 then dispari[i div 2 +1 ]:=(V[i] -1) div 2 ;
for i:=0 to dimpari do write (pari[i],' '); writeln;
for i:=0 to dimdispari do write (dispari[i],' '); writeln;
pari[0]:=-1; dispari[0]:=-1;
ordinabile:=true;
for z:=0 to N-1 do if V[z] mod 2 <> z mod 2 then begin ordinabile:=false; n_ribaltamenti:=-1; end;
if ordinabile=true then begin
for i:=0 to dimpari do controllo[i]:=0;
n_ribaltamenti:=0; piccolidopo:=0;
for i:=dimpari downto 1 do
begin
piccolidopo:=piccolidopo+somma(Pari[i]);
writeln('ww ',Pari[i],' ',somma(Pari[i]));
modifica (pari[i], dimpari);
end;
n_ribaltamenti:=n_ribaltamenti+piccolidopo;
for i:=0 to dimdispari do controllo[i]:=0;
piccolidopo:=0;
for i:=dimdispari downto 1 do
begin
piccolidopo:=piccolidopo+somma(Dispari[i]);
writeln('zz ',Dispari[i],' ',somma(Dispari[i]));
modifica (dispari[i], dimdispari);
end;
n_ribaltamenti:=n_ribaltamenti+piccolidopo;
end;
paletta_sort:=n_ribaltamenti;
end;
begin
(*assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);*)
{ Reading input }
readln( N);
Setlength(V, N);
for i0 := 0 to N-1 do
begin
read(V[i0]);
end;
{ Calling functions }
numero_ribaltamenti := paletta_sort(N, V);
{ Writing output }
writeln(numero_ribaltamenti);
end.
cHJvZ3JhbSBwYWxldHRhOyAoKm5vbiBmdW56aW9uYW5vIGNvbWUgZG92cmViYmVybyBTT01NQSBFIE1PRElGSUNBKikKdmFyIE4saTAgLGkseiwgZGltcGFyaSwgZGltZGlzcGFyaTpMb25naW50OwogICAgVixwYXJpLCBkaXNwYXJpLCBjb250cm9sbG86IGFycmF5ICBvZiBsb25naW50OwogICAgbl9yaWJhbHRhbWVudGksbnVtZXJvX3JpYmFsdGFtZW50aSwgcGljY29saWRvcG8sbWFnZ2lvcmlwcmltYSxmdW9yaXBvc3RvLCByaWNvcmRhZnVvcmlwb3N0bzppbnQ2NDsKICAgICBvcmRpbmFiaWxlOiBib29sZWFuOwogICAgIApmdW5jdGlvbiBTT01NQShYOmxvbmdpbnQpOmludDY0OwogYmVnaW4KICAgIFNPTU1BOj0wOwoJd2hpbGUgKFggPiAwKSAJZG8gCgkgICBiZWdpbgoJICAgICAKCSAgICAgU09NTUE6PVNPTU1BK2NvbnRyb2xsb1tYXTsKCSAgICAgIFg6PVgtKFggYW5kIC1YKTsKCSAgIGVuZAogZW5kOwpQcm9jZWR1cmUgbW9kaWZpY2EoWDpsb25naW50OyBEOmxvbmdpbnQpOwogIGJlZ2luCiAgICAgCXdoaWxlIChYIDw9RCkgCWRvIAogICAgICAgIAliZWdpbgogICAgICAgIAkgIGNvbnRyb2xsb1tYXTo9Y29udHJvbGxvW1hdKzE7CgkgICAgICAgICAgWDo9WCArIChYIG9yIFgrMSk7CgkgICAgICAgZW5kCiAgZW5kOwogCiBmdW5jdGlvbiBwYWxldHRhX3NvcnQoTjogbG9uZ2ludDsgVjogYXJyYXkgb2YgbG9uZ2ludCk6IGludDY0OwpiZWdpbgogICAgaWYgTiBtb2QgMiA9IDAgdGhlbiBiZWdpbiBkaW1wYXJpOj1OIGRpdiAyOyBkaW1kaXNwYXJpOj0gZGltcGFyaTsgZW5kCiAgICAgICAgICAgICAgICAgICBlbHNlIGJlZ2luIGRpbWRpc3Bhcmk6PU4gZGl2IDIgOyBkaW1wYXJpOj0gZGltZGlzcGFyaSsxOyBlbmQ7CiAgIFNldGxlbmd0aChwYXJpLCBkaW1wYXJpKTsKICAgU2V0bGVuZ3RoKGRpc3BhcmksIGRpbWRpc3BhcmkpOwogICBTZXRsZW5ndGgoY29udHJvbGxvLCBOKTsKICAgZm9yIGk6PU4tMSBkb3dudG8gMCBkbyBpZiBpIG1vZCAyID0wIHRoZW4gcGFyaVtpIGRpdiAyKzEgIF06PVZbaV0gZGl2IDI7CiAgICAgICAgICAgIGZvciBpOj1OLTEgZG93bnRvIDAgZG8gaWYgaSBtb2QgMiA8PiAwIHRoZW4gZGlzcGFyaVtpIGRpdiAyICsxIF06PShWW2ldIC0xKSBkaXYgMiAgOwogICAgICAgICAgICBmb3IgaTo9MCB0byBkaW1wYXJpICBkbyB3cml0ZSAocGFyaVtpXSwnICcpOyB3cml0ZWxuOwogICAgICAgICAgICBmb3IgaTo9MCB0byBkaW1kaXNwYXJpIGRvIHdyaXRlIChkaXNwYXJpW2ldLCcgJyk7IHdyaXRlbG47IAogICBwYXJpWzBdOj0tMTsgZGlzcGFyaVswXTo9LTE7CiAgIG9yZGluYWJpbGU6PXRydWU7CiAgIGZvciB6Oj0wIHRvIE4tMSBkbyBpZiBWW3pdIG1vZCAyIDw+IHogbW9kIDIgdGhlbiBiZWdpbiBvcmRpbmFiaWxlOj1mYWxzZTsgbl9yaWJhbHRhbWVudGk6PS0xOyBlbmQ7CiAgIGlmIG9yZGluYWJpbGU9dHJ1ZSB0aGVuIGJlZ2luICAgCiAgICAgICAgICAgIGZvciBpOj0wIHRvIGRpbXBhcmkgIGRvIGNvbnRyb2xsb1tpXTo9MDsKICAgICAgICAgICAgbl9yaWJhbHRhbWVudGk6PTA7IHBpY2NvbGlkb3BvOj0wOwogICAgICAgICAgICBmb3IgaTo9ZGltcGFyaSBkb3dudG8gMSBkbwogICAgICAgICAgICAgICAgIGJlZ2luCgkgICAgICAgICAgICAgICBwaWNjb2xpZG9wbzo9cGljY29saWRvcG8rc29tbWEoUGFyaVtpXSk7IAoJICAgICAgICAgICAgICAgd3JpdGVsbignd3cgJyxQYXJpW2ldLCcgJyxzb21tYShQYXJpW2ldKSk7CgkgICAgICAgICAgICAgICBtb2RpZmljYSAocGFyaVtpXSwgZGltcGFyaSk7CgkgICAgCQllbmQ7IAoJICAgICAgICBuX3JpYmFsdGFtZW50aTo9bl9yaWJhbHRhbWVudGkrcGljY29saWRvcG87CgkgICAgICAgZm9yIGk6PTAgdG8gZGltZGlzcGFyaSAgZG8gY29udHJvbGxvW2ldOj0wOyAKCSAgICAgICBwaWNjb2xpZG9wbzo9MDsKCSAgICBmb3IgaTo9ZGltZGlzcGFyaSBkb3dudG8gMSBkbwogICAgICAgICAgICAJYmVnaW4KCSAgICAJCSAgIHBpY2NvbGlkb3BvOj1waWNjb2xpZG9wbytzb21tYShEaXNwYXJpW2ldKTsgCgkgICAgICAgICAgICAgICB3cml0ZWxuKCd6eiAnLERpc3BhcmlbaV0sJyAnLHNvbW1hKERpc3BhcmlbaV0pKTsKCSAgICAgICAgICAgICAgIG1vZGlmaWNhIChkaXNwYXJpW2ldLCBkaW1kaXNwYXJpKTsKCSAgICAJCWVuZDsKCSAgICAJCQluX3JpYmFsdGFtZW50aTo9bl9yaWJhbHRhbWVudGkrcGljY29saWRvcG87CgogCgkgZW5kOyAKIHBhbGV0dGFfc29ydDo9bl9yaWJhbHRhbWVudGk7CmVuZDsKCgpiZWdpbgogICAgKCphc3NpZ24oaW5wdXQsICdpbnB1dC50eHQnKTsgcmVzZXQoaW5wdXQpOwogICAgYXNzaWduKG91dHB1dCwgJ291dHB1dC50eHQnKTsgcmV3cml0ZShvdXRwdXQpOyopCiAgICAgICAgeyBSZWFkaW5nIGlucHV0IH0KCXJlYWRsbiggTik7CglTZXRsZW5ndGgoViwgTik7Cglmb3IgaTAgOj0gMCB0byBOLTEgZG8KCWJlZ2luCgkJcmVhZChWW2kwXSk7CgllbmQ7CgkKICAgICAgICAKCXsgQ2FsbGluZyBmdW5jdGlvbnMgfQoJbnVtZXJvX3JpYmFsdGFtZW50aSA6PSBwYWxldHRhX3NvcnQoTiwgVik7CgoJeyBXcml0aW5nIG91dHB1dCB9Cgl3cml0ZWxuKG51bWVyb19yaWJhbHRhbWVudGkpOwoJCmVuZC4K