#P16047. [Oni2024国家队选拔赛]Perm
[Oni2024国家队选拔赛]Perm
题目描述
给定一个 的排列:
排列中的一个环定义为一个序列:
满足:
$$i_2=P[i_1],\quad i_3=P[i_2],\quad \ldots,\quad i_k=P[i_{k-1}],\quad i_1=P[i_k].$$一个区间 被称为好区间,如果存在一个长度为 的环 ,使得 中的每个数都在这个环中恰好出现一次。
也就是说,区间 内的所有位置最终应构成一个完整的环。
一次操作可以选择两个位置 ,交换 和 。
现在有 个询问。每个询问给出 ,你需要求出:
至少需要对原排列进行多少次交换,才能使区间 变成好区间。
注意:所有询问互相独立。也就是说,为某个询问进行的交换不会保留到下一个询问中。
另外,对于询问 ,允许交换区间内元素和区间外元素。
输入格式
第一行包含两个整数 。
第二行包含 个整数,表示排列 。
接下来 行,每行包含两个整数 ,表示一个询问。
输出格式
输出 行,每行一个整数,表示对应询问的答案。
数据范围
- ;
- 。
子任务
| 子任务 | 分值 | 限制 |
|---|---|---|
| 1 | 2 | |
| 2 | 11 | |
| 3 | 9 | |
| 4 | 18 | |
| 5 | 40 | |
| 6 | 20 | 无额外限制 |
样例
输入
5 3
4 1 2 3 5
2 4
1 4
1 5
输出
1
0
1
样例解释
对于区间 ,只需交换位置 和位置 ,即可使该区间成为好区间。
区间 已经是好区间,因此答案为 。
对于区间 ,需要一次交换,例如交换位置 和位置 。