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; }