在一个偏远的图书馆里,有个书架上放着 n 本书,每本书上都标有一个从 1 到 n 的唯一编号。 按照规矩,这些书应该按编号从小到大依次排列:1 号书位于最左端,2 号 书紧随其后,以此类推,直到 n 号书在最右端。这样的顺序不仅看起来整齐, 也方便读者快速找到想借的书。 可昨天店里人来人往,借书还书忙得不可开交,书架上的顺序出现了错乱。 现在,书架上的书变成了 a = (a1, a2, . . . , an ),其中 ai 表示第 i 个位置上的书编 号。 管理员决定动手整理书架,但时间有限,他希望用最少的操作把书的顺 序恢复到正确的排列。每次操作,他可以挑选书架上任意两本书,交换它们 的位置。例如,如果当前排列是 (3, 1, 2) ,他可以交换第 1 本和第 2 本,得到 (1, 3, 2) ,再交换第 2 本和第 3 本,得到 (1, 2, 3) 。 你的任务是帮助管理员计算,最少需要进行多少次操作,才能让书架上的 书的编号排列变为 (1, 2, . . . , n) 。
输入的第一行包含一个正整数 n ,表示书架上书的总数。
第二行包含 n 个正整数 a1, a2, · · · , an ,相邻整数之间使用一个空格分隔, 依次表示当前书架上每本书的编号。a1, a2, . . . , an 是一个 1 到 n 的排列。
输出一行包含一个整数表示答案,即将书架上的书恢复到正确排列所需的 最少操作次数。
3 3 1 2
2
【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ n ≤ 103 ,1 ≤ ai ≤ n ,a1, a2, . . . , an 各不相同;
对于所有评测用例,1 ≤ n ≤ 106 ,1 ≤ ai ≤ n ,a1, a2, . . . , an 各不相同。