智乃的跳跃排序
题号:NC287871
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

众所周知,在只交换相邻元素的前提下,可以对一个数组进行完整的排序操作

现在只能交换下标或者值的差值为k的元素,即对于i,j,如果|i-j|=k或者|a_i-a_j|=k,则可交换a_i,a_j的值

假设交换是连续进行的,你可以无限次的执行交换操作,每一次交换操作建立在之前的基础上,给定一个长度为N的数组,数组的值互不相同,问是否能在这个限制条件下实现升序排序

输入描述:

第一行输入两个正整数N,k(1\leq N \leq 10^5,1\leq k \leq 10^9)

接下来一行输入N个互不相同的正整数a_i(1\leq a_i \leq 10^9)

输出描述:

如果可以,请输出"Yes",否则输出"No"
示例1

输入

复制
6 5
3 2 11 4 5 1

输出

复制
No

说明

无论如何都不可能排序成功
示例2

输入

复制
6 5
3 2 8 4 5 1

输出

复制
Yes

说明

因为8-3=5,所以先交换38,数组变为[8,2,3,4,5,1]
然后由于a_1=8,a_6=1,6-1=5交换a_1a_6,数组变为[1,2,3,4,5,8]
符合题目要求
示例3

输入

复制
1 1
1

输出

复制
Yes

说明

只有一个数字时不需要交换,默认就是有序的
示例4

输入

复制
3 2
3 1 2

输出

复制
No

说明

如果3先和1交换,那么交换后3永远可不可能和2交换到正确的位置
如果3先和2交换,那么交换后12永远也不可能交换到正确的位置
故无解