题目:Unimodal Array
Array of integers is unimodal, if:
it is strictly increasing in the beginning;
after that it is constant;
after that it is strictly decreasing.
The first block (increasing) and the last block (decreasing) may be absent. It is allowed that both of this blocks are absent.For example, the following three arrays are unimodal: [5, 7, 11, 11, 2, 1], [4, 4, 2], [7], but the following three are not unimodal: [5, 5, 6, 6, 1], [1, 2, 1, 2], [4, 5, 5, 6].
Write a program that checks if an array is unimodal.
Input
The first line contains integer n (1 ≤ n ≤ 100) — the number of elements in the array.
The second line contains n integers a1, a2, …, an (1 ≤ ai ≤ 1 000) — the elements of the array.
Output
Print"YES" if the given array is unimodal. Otherwise, print “NO”.
You can output each letter in any case (upper or lower).
Examples
Input
6
1 5 5 5 4 2
Output
YES
Input
5
10 20 30 20 10
Output
YES
Input
4
1 2 1 2
Output
NO
Input
7
3 3 3 3 3 3 3
Output
YES
Note
In the first example the array is unimodal, because it is strictly increasing in the beginning (from position 1 to position 2, inclusively), that it is constant (from position 2 to position 4, inclusively) and then it is strictly decreasing (from position 4 to position 6, inclusively).
题目大意:
输入样例有多组(隐含意义是输入以文件尾结束,我也是吃过这个的亏,不然就会超时或者其他的错误)
对于每组数据输入一个n表示输入的数据个数
需要对输入的数据进行判断:输入的数据最多有三个部分构成:递增,持平,递减
递增和递减部分可以不存在比如2 2 2 2 2
持平部分可以只有一个数比如1 2 3 2 1
如果符合输出YES否则输出NO。
AC代码:
#include <cstdio>
int a[105];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
int add=1,fair=0,reduce=0;
int judge=0;
for(int i=0;i<n-1;i++)
{
if(a[i]<a[i+1])
{
if(fair!=0||reduce!=0)
{
judge=1;
break;
}
}
else if(a[i]==a[i+1])
{
if(reduce!=0)
{
judge=1;
break;
}
if(fair==0)
fair=1;
}
else if(a[i]>a[i+1])
{
reduce=1;
}
}
if(judge==0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}