AlgoMooc
← 返回题库

P5750. 交换一次获得长度为k的排列

中等通过率 25% · 提交 8 · 通过 2
滑动窗口哈希表贪心枚举固定滑窗

小慕有一个长度为n的,他可以选择两个位置,然后交换这两个位置上的数。 他想知道能否通过,使得存在一个,是长度为k的排列。 排列是指一个长度为len的整数数组,数组中包含1到len的每个数,且每个数只出现一次。

提示:带虚线的词点一下有通俗解释。

输入描述

第一行两个整数n,k,表示排列长度和连续子段长度。 第二行n个整数a1, a2, ..., an,表示排列。 1 <= k <= n <= 10^5

输出描述

如果能够通过最多一次交换,存在一个连续子段是排列,输出YES,并输出交换的位置:先输出一个整数x (0 <= x <= 1),然后输出x行,每行两个整数u, v,表示交换位置u, v (u < v) 否则输出NO。

示例

示例 1

输入

5 3
1 2 3 4 5

输出

YES
0

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解(训练营专属)

登录后查看题目图解

题目图解为训练营学员专属内容,请先登录。

微信扫码登录还不是训练营学员?了解训练营 →
写完代码点「提交」,将对全部测试用例判题。