Дана перестановка. Наименьшее число обменов, чтобы ее отсортировать.
Входные данные
Число N (1 <= N <= 10000), затем перестановка.
Выходные данные
Выведите ответ.
Пример
Ввод
5
1 4 3 5 2
Вывод
2
Что то не получается.
var
mas:array[1..100000] of longint;
c:array [1..100000] of boolean;
k,sum,d,i,n:integer;
begin
ReadLn(N);
for i:=1 to N do
begin
Read(k);
mas[k]:=i;
end;
sum:=0;
i:=1;
repeat
while (c[i]) and (i<=n) do inc(i);
if i>n then break else c[i]:=true;
k:=mas[i];
c[k]:=true;
d:=1;
while i<>k do
begin
inc(d);
c[k]:=true;
k:=mas[k];
end;
sum:=sum+d-1;
until false;
Writeln(sum);
end.