时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
我叫 sakaido… 名字记不全了,不过也无所谓了。重要的是,我是一个神探,而且我必须将怪盗“十文字”捉拿归案。
“十文字“每次犯罪之前都会留下一定的”预告“,是想转达什么信号吗?还是单纯的恶趣味呢?不过,这些都与我无关。我的任务是破解这名为《库特莉亚夫卡的排序》的能量锁。
能量锁有 n 个位置(索引从 1 开始),每个位置上 i 有一个大小为

的能量。只有当能量非降序排列( 即对于任意位置
)
,都有

)时,能量锁才会被开启。我可以通过交换若干次某两个位置的能量达成上述目的。不过,由于“十文字“的特殊设计,只有位于 m 对位置上的能量可以相互交换,而交换其他位置则会引起爆炸。
由于这可能是“十文字“的恶作剧,这能量锁可能不能通过交换达成非降序。为减少时间的浪费,请你帮忙告诉我,这个能量锁可能被开启吗?
输入描述:
输入的第一行是两个整数
,分别表示能量锁位置的个数及存在 m 对位置可以交换。
接下来的一行为 n 个整数,第i个整数表示i位置的能量大小)
接下来 m 行,每行2个整数
,表示位置 u 和位置 v 的能量可以相互交换。
输出描述:
如果能量锁是可开启的,输出Yes,反之输出No。
示例1
输入
复制
5 4
2 3 1 4 5
4 5
1 2
2 3
3 4
示例2
输入
复制
7 5
1 111 2 4 6 100 112
3 4
4 5
4 6
2 3
2 1
示例3
输入
复制
7 5
1 2 4 4 6 8 4
1 3
3 2
4 5
1 2
4 6