Помогите понять что делает эта программа и на каком принципе она основана:
{$I-,S-,Q-,R-}
Program m_inverse;
var
i: LongInt;
N: LongInt;
Result: Int64;
P, Pos, S: Array[1..100000] of LongInt;
RCnt, LCnt: Array[1..100000] of Int64;
Function Prev(X: LongInt): LongInt;
begin
Prev:= X and (X-1);
end;
Function Next(X: LongInt): LongInt;
begin
Next:= X shl 1 - Prev(X);
end;
Procedure Add(pos: LongInt);
var
X: LongInt;
begin
X:= pos;
While X <= N do begin
Inc(S[X]);
X:= Next(X);
end;
end;
Function FindSimpleSum(x: LongInt): LongInt;
var
Sum: LongInt;
begin
Sum:= 0;
While x>0 do begin
Sum:= Sum + S[x];
x:= Prev(x);
end;
FindSimpleSum:= Sum;
end;
Function FindSum(l, r: LongInt): LongInt;
begin
FindSum:= FindSimpleSum(r) - FindSimpleSum(l-1);
end;
begin
Assign(Input, 'input.txt');
ReSet(Input);
ReadLn(N);
For i:= 1 to N do begin
ReadLn(P[i]);
Pos[P[i]]:= i;
end;
Close(Input);
FillChar(S, SizeOf(S), 0);
For i:= 1 to N do begin
RCnt[Pos[i]]:= FindSum(Pos[i]+1, N);
Add(Pos[i]);
end;
FillChar(S, SizeOf(S), 0);
For i:= N downto 1 do begin
LCnt[Pos[i]]:= FindSum(1, Pos[i]-1);
Add(Pos[i]);
end;
Result:= 0;
For i:= 1 to N do
Result:= Result + LCnt[i] * RCnt[i];
Assign(Output, 'output.txt');
ReWrite(Output);
WriteLn(Result);
Close(Output);
end.
Ответ на:
комментарий
от anonymous

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Pascal системы исчисления (2022)
- Форум Pascal (2018)
- Форум Правильно портировать Pascal код (2018)
- Форум Занимательный PAS2C (2017)
- Форум Разбраинфакaлка данных на вашем ПеКа (2024)
- Форум Сравнение производительности доступа к полям структур в Python, Common Lisp и С++ (2017)
- Форум [vala][srt2tmx] Покритикуйте код (2012)
- Форум Решил освоить perl =) (2005)
- Форум Perl + FastCGI + nginx (2009)
- Форум Pascal (2008)