2-4 美丽数列 (100分)
小明是个普通的计算机本科生,很喜欢研究数组相关的问题。在他的认知里,美丽的数组是这样的,对于一个长度为n的数组a,存在一个下标i(1<=i<=n)使得1i之间的数是严格递增的,i+1n之间的数是严格递减的。现在这个数组a里的元素是随机给定的(这个数组可能是不美丽的),对于数组a内的任意一个元素ai我们可以进行若干次ai=ai-1(ai>0)的操作,问能否通过若干次操作使得这个数组变得美丽。
输入格式:
第一行输入数组长度n (1≤n≤3*1e5), 第二行输入n个整数a1,…,an (0≤ai≤1e9)。
输出格式:
输出“Yes”表示这个数组可以变美丽,输出“No”表示不可以。
输入样例:
3
1 0 1
输出样例:
No
代码:
#include<stdio.h>
int main(void)
{
int n,a1,a2,min,flag1,flag2;
int m = 0,judge = 0,k = 0;
scanf("%d", &n);
scanf("%d", &a1);
for (int i = 1; i < n; i++) {
scanf("%d", &a2);
if (a2 <= a1) {
flag1 = i;
flag2 = i;
min = a2;
m = 1;
break;
}
a1 = a2;
}
if (m) {
for (int i = flag1 + 1; i < n; i++) {
a1 = a2;
scanf("%d", &a2);
if (a2 < min) {
flag2 = i;
min = a2;
k = 1;
}
}
}
if (m && (min - (n - flag2 - 1)) <= 0) judge = 1;
if (judge || n == 1 || n == 2) printf("No");
else printf("Yes");
return 0;
}