Title

CF1349B Orac and Medians 题解

解题思路

一个比较显然的结论:

  • 若序列中存在一段连续的长度大于 1 的区间,且区间中的数均为 k,那么一定可以将整个序列转化为 k

进一步的,我们可以推出,若序列中有一段区间的中位数为 k,那么这个序列一定可以全部转化为 k

最后特判 n=1 和序列中没有 k 的情况即可。

AC 代码

#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#define N 100005
#define inf 2e9+7
int n,k,a[N],p[N],ce;
int l[N],r[N],cl,cr;
inline void work(){
    scanf("%d%d",&n,&k);ce=0;
    for(register int i=1;i<=n;++i)
        scanf("%d",&a[i]);
    for(register int i=1;i<=n;++i)
        if(k==a[i]) p[++ce]=i;
    if(!ce){puts("No");return;}
    if(n==1){puts("Yes");return;}
    for(register int i=1;i<=ce;++i){
        int now=p[i];
        if(now>1&&a[now-1]>=k){
            puts("Yes");return;
        }
        else if(now<n&&a[now+1]>=k){
            puts("Yes");return;
        }
    }
    for(register int i=1;i<n;++i)
        if(a[i]>=k&&a[i+1]>=k){
            puts("Yes");return;
        }
    for(register int i=2;i<n;++i)
        if(a[i-1]>=k&&a[i+1]>=k){
            puts("Yes");return;
        }
    puts("No");
}
signed main(){
    int T;scanf("%d",&T);
    while(T--) work();
}
posted @   UncleSam_Died  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示