Помогите понять что делает эта программа и на каком принципе она основана:
{$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);
Pos[P]:= i;
end;
Close(Input);
FillChar(S, SizeOf(S), 0);
For i:= 1 to N do begin
RCnt[Pos]:= FindSum(Pos+1, N);
Add(Pos);
end;
FillChar(S, SizeOf(S), 0);
For i:= N downto 1 do begin
LCnt[Pos]:= FindSum(1, Pos-1);
Add(Pos);
end;
Result:= 0;
For i:= 1 to N do
Result:= Result + LCnt * RCnt;
Assign(Output, 'output.txt’);
ReWrite(Output);
WriteLn(Result);
Close(Output);
end.
особо интересуют функции prev и next
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
prev — вычитает из x самый младший бит, next — наоброт, добавляет к x младший бит x.
prev (…1100) -> …1000
next (…0100) -> …1000