CodeForces - 1291B Array Sharpening 模拟

题意

判断给定字符串是否可以通过减少每个元素的值(不小于零)来让数组先递增后递减;

思路

因为元素不能相同;
找到变化后最长上升前缀和最长下降后缀进行比较就可以了;

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=3e5+10;
int a[N];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,i;
        scanf("%d",&n);
        int flag=true;
        for(i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
        }
        for(i=0; i<n; i++)
        {
            if(a[i]<i)
                break;
        }
        for(int j=n-1,k=0; j>=0; j--,k++)
        {
            if(a[j]<k)
            {
                if(j+1>i-1)
                    flag=false;
                break;
            }
        }
        if(flag)
        {
            cout<<"Yes"<<endl;
        }
        else
        {
            cout<<"No"<<endl;
        }
    }
    return 0;
}

发布了19 篇原创文章 · 获赞 19 · 访问量 677

猜你喜欢

转载自blog.csdn.net/qq_44086097/article/details/104151130