小明是个普通的计算机本科生,很喜欢研究数组相关的问题。在他的认知里,美丽的数组是这样的,对于一个长度为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<bits/stdc++.h>
using namespace std;
int main(){
int n;cin>>n;
int a[n],t[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){//找下标i
for(int k=0;k<n;k++) t[k]=a[k];//每次循环都会改变数组
int flag=1;
for(int j=i;j>0;j--){//下标左边严格递增
if(t[j]<t[j-1]){
t[j-1]=t[j]-1;
if(t[j-1]<0){
flag=0;
}
}
if(!flag) break;
}
if(!flag) continue;//左边递增已经不成立了,直接下一轮循环
for(int j=i;j<n-1;j++){//若左边递增成立,右边严格递减
if(t[j]<=t[j+1]){
t[j+1]=t[j]-1;
if(t[j+1]<0){
flag=0;
}
}
if(!flag) break;
}
if(flag){
cout<<"Yes"<<endl;
return 0;
}
}
cout<<"No"<<endl;
return 0;
}