①问题(来源 CodeForces Problem - 1760D)
问题如图所示
最简单地概括,一个数组表示山的高度,如果数组大小排布如图一二所示,即为山谷;
即山谷数组要么就不严格递增(情况①)。要么就先不严格递减到最小,再不严格递增(情况②);
②输入输出描述:
输入几组数据,每组多少元素,每个元素多少,老套路了....
③代码示例:
④思路:
采用分治法,即不论是情况①or②,都是在最小值前不严格递减,在最小值后不严格递增的。
那么,
我们可以先遍历出最小值min,
再以min值为标准,分治两路,I路从数组第一个到min值,II路从min值到数组最后一个。
I路若遵循不严格递减,则判断1(即pol1为真)为真。
II路若遵循不严格递增,则判断2(即pol2为真)为真。
因为此代码在分治之前pol1,2全为1(即真),
若两路都为真,则pol1,2都还是1,
不是0,此时的数组为“山谷”。
若其中某一路不成立或者两路均不成立,则pol1,2对应=0,即为假。
此时数组不是“山谷”。
④思考
大家可以自己在脑中自己画一张图,山谷中不会有凸起,便可以理解
凭借此题,做山峰的题也是一样步骤,只不过更加复杂,
也可以作为分治法的一个例题