Algorithm 查找是否可以进行排列

Algorithm 查找是否可以进行排列,algorithm,permutation,Algorithm,Permutation,给定从1到N(含)的自然整数的排列。最初,排列是1,2,3,…,N。我们还得到M对整数,其中第i个是(Li,Ri)。在一个回合中,我们可以选择这些对中的任何一对(比如索引j),并在从Lj到Rj的位置上任意洗牌我们排列的元素,包括(位置是基于1的)。我们的圈数不受限制,您可以多次选择任何一对 目标是得到给定的置换p。如果可能,则输出“可能”,否则输出“不可能” 示例:设N=7,M=4,数组为[3 1 2 4 5 7 6],查询为: 1 2 4 4 6 7 2 3 这里的答案是可能的。将每一对视为

给定从1到N(含)的自然整数的排列。最初,排列是1,2,3,…,N。我们还得到M对整数,其中第i个是(Li,Ri)。在一个回合中,我们可以选择这些对中的任何一对(比如索引j),并在从Lj到Rj的位置上任意洗牌我们排列的元素,包括(位置是基于1的)。我们的圈数不受限制,您可以多次选择任何一对

目标是得到给定的置换p。如果可能,则输出“可能”,否则输出“不可能”

示例:设N=7,M=4,数组为[3 1 2 4 5 7 6],查询为:

1 2
4 4
6 7
2 3

这里的答案是可能的。

将每一对视为一个区间,计算非重叠区间的列表,然后针对每个
i
,测试排列位置
i
处的值是否为
i
或与
i
处于相同的非重叠区间

这是因为,如果我们有
一个See on Meta。