CF1350D-Orac and Medians

题意:

给你n个数和1个k,问你能不能将这n个数都变成k,你可以选择一段区间,将该区间内所有的数变成都变成他们的中位数

题目链接:https://codeforces.com/contest/1350/problem/D

思路:

我们发现若不存在a[i]==k,答案肯定是no的,若存在,如果有两个连续的大于等于k的数,那么肯定是可以一个一个转化成大于等于k

的数,最后肯定能全部都变成k,如果两个大于等于k的数中间隔着一个小于k的数,这种情况也是符合的

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2e5+5;
const int INF =1e9;
int a[MAXN];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t;cin>>t;
    while(t--)
    {
        int n,k;cin>>n>>k;
        int flag=0;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            if(a[i]==k)
                flag=1;
        }
        if(!flag)
            cout<<"NO"<<endl;
        else
        {
            int flag2=0;
            for(int i=1;i<=n-1;i++)
            {
                if(a[i]>=k&&(a[i+1]>=k||(a[i+2]>=k&&i+2<=n)))
                {
                    flag2=1;break;
                }
            }
            if(flag2||n==1)
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }


    }
    return 0;
}

 

posted @ 2020-05-14 15:59  grass_lin  阅读(147)  评论(0编辑  收藏  举报