codeforces round #616 div2 B Array sharpening(思维)

 

 题解:极限考虑一下,问题会变成三种情况:

1,数组变成0,1,2,3,4,5,......,n-2,n-1(如果有一个数a[i]<i-1,就不行)

2,数组变成n-1,n-2, ......,5,4,3,2,1,0(如果有一个数a[i]<n-i,就不行)

3,数组变成0,1,2,3..... k ...... ,3,2,1,0

接下来就简单了;

从前向后扫一遍数组,标记一下,在从后往前扫一遍数组在标记一下,如果能交到一起就可以,否则就不行。

scanf输入,cin会超时

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define maxx 1010
const int maxn=3e5+10;
int l[maxn],r[maxn],n;
long long a[maxn];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        memset(l,0,sizeof(l));
        memset(r,0,sizeof(r));
        scanf("%d",&n);
        for(int i=1; i<=n; i++) scanf("%lld",&a[i]);
        for(int i=1; i<=n; i++)
        {
            if(a[i]>=i-1)
              l[i]=1;
            else
                break;
        }
        for(int i=n; i>=1; i--)
        {
            if(a[i]>=n-i)
                r[i]=1;
            else
                break;
        }
        bool flag=0;
        for(int i=1; i<=n; i++)
        {
            if(l[i]&&r[i])
                flag=1;
        }
        if(flag) printf("YES\n");
        else printf("NO\n");
    }
    return 0;}

猜你喜欢

转载自www.cnblogs.com/sweetlittlebaby/p/12661603.html
今日推荐