评论区的大佬个个都是人才,说话又好听
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void async function () { // Write your code here while(line = await readline()){ const t = +line for(let i = 0; i < t; i++) { const [n, m] = (await readline()).split(' ').map(Number) const a = (await readline()).split(' ').map(Number) // a中一定不能有重复的数,否则不可能单调 const seen = new Set(a) if(seen.size !== n) { console.log('NO') continue } let isValid = false // 遍历每个[l, r]区间,判断: // 1.[l, r]区间单调 // 2.[l, r]区间外的元素满足 x > max 或 x < min,(min,max为区间的最大和最小值) let l = 0, r = m - 1 while(r < n) { const nums = a.slice(l, r + 1) let max = nums[0] let min = nums[0] let upFlag = true let downFlag = true for(let i = 0; i <= r - l; i++) { if(i < r - l && nums[i] >= nums[i + 1]) { upFlag = false // 非递增 } if(i < r - l && nums[i] <= nums[i + 1]) { downFlag = false // 非递减 } max = Math.max(nums[i], max) min = Math.min(nums[i], min) } if(!upFlag && !downFlag) { // 区间非递增或者非递减 l++ r++ continue } // 获取[l, r]区间外的元素 const front = a.slice(0, l) const tail = a.slice(r + 1) // console.log(front, min) // console.log(tail, max) if(front.every(num => num > max || num < min) && tail.every(num => num > max || num < min)) { // 满足条件 console.log('YES') isValid = true break } l++ r++ } if(!isValid) console.log('NO') } } }()