链接:https://ac.nowcoder.com/acm/contest/317/G
来源:牛客网
小a的排列
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
小a有一个长度为n的排列。定义一段区间是”萌”的,当且仅当把区间中各个数排序后相邻元素的差为1
现在他想知道包含数x,y的长度最小的”萌”区间的左右端点
也就是说,我们需要找到长度最小的区间[l,r],满足区间[l,r]是萌的,且同时包含数x和数y
如果有多个合法的区间,输出左端点最靠左的方案。
输入描述
第一行三个整数N,x,y,分别表示序列长度,询问的两个数
第二行有n个整数表示序列内的元素,保证输入为一个排列
输出描述
输出两个整数,表示长度最小“萌”区间的左右端点
思路
因为输入是一个排列,所以每个数只会出现一次,先找到x和y的下标L,R,然后找到[L,R]内的最大值和最小值,然后找最小值到最大值这些数的最小下标和最大下标l,r,如果[l,r]包含了[L,R],则代表[l,r]之间可能存在多余的数。
然后继续找大的区间的最大最小值,更新l,r和L,R,直到[l,r]不大于[L,R],这时候的区间就是最小的
AC代码
1 |
|