[codeforces 1291B] Array Sharpening 制造 上升数组;上升、下降数组;下降数组,进行对比,若能通过对比,则Yes,否则No
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址https://codeforces.com/contest/1291/problem/B
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
B - Array Sharpening | GNU C++11 | Accepted | 62 ms | 1000 KB |
//制造 上升数组;上升、下降数组;下降数组,进行对比,若能通过对比,则Yes,否则No
/*
以下面数据为例
1
6
100 11 15 9 7 8
Yes
100 11 15 9 7 8
0 1 2 3 4 5 上升数组 Yes
100 11 15 9 7 8
5 4 3 2 1 0 下降数组 Yes
*/
#include <stdio.h>
int a[300010];
int main(){
int t,n,up,i,flag;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
flag=0,up=1,a[0]=-1;
for(i=1;i<=n;i++)//上升数组,上升、下降数组
if(up&&a[i]>=i-1)continue;//上升数组
else{ //上升数组跳跃到下降数组
if(up==1&&n-i==a[i-1]){//转折时的处理
flag=1;//2个峰,No.
break;
}
if(a[i]>=n-i)continue;//下降数组
else break;
up=0;
}
if(flag) printf("No\n");//2个峰,No.
else if(i==n+1)printf("Yes\n");
else{//下降数组
for(i=1;i<=n;i++)
if(a[i]>=n-i)continue;
else break;
if(i==n+1)printf("Yes\n");
else printf("No\n");
}
}
}