Codeforces Round #651 (Div. 2) D - Odd-Even Subsequence 二分
Posted qingyuyyyyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #651 (Div. 2) D - Odd-Even Subsequence 二分相关的知识,希望对你有一定的参考价值。
#include<map> #include<queue> #include<time.h> #include<limits.h> #include<cmath> #include<ostream> #include<iterator> #include<set> #include<stack> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define rep_1(i,m,n) for(int i=m;i<=n;i++) #define mem(st) memset(st,0,sizeof st) int read() { int res=0,ch,flag=0; if((ch=getchar())==‘-‘) //判断正负 flag=1; else if(ch>=‘0‘&&ch<=‘9‘) //得到完整的数 res=ch-‘0‘; while((ch=getchar())>=‘0‘&&ch<=‘9‘) res=res*10+ch-‘0‘; return flag?-res:res; } typedef long long ll; typedef pair<int,int> pii; typedef unsigned long long ull; typedef pair<double,double> pdd; const int inf = 0x3f3f3f3f; const int maxn=2e5+5; int n,k,a[maxn]; bool check(int x,bool flag) { int cnt=0; for(int i=1; i<=n; i++) { if(flag||a[i]<=x)//最后取min,所以只看一侧 { cnt++; flag=!flag; } } return cnt>=k;//有没有k个满足条件的元素 } int main() { int l=1,r=-1; cin>>n>>k; for(int i=1; i<=n; i++) cin>>a[i],r=max(r,a[i]); while(l<r) { int mid=(l+r)/2; if(check(mid,0)||check(mid,1)) r=mid; else l=mid+1; } cout<<r<<endl; return 0; }
以上是关于Codeforces Round #651 (Div. 2) D - Odd-Even Subsequence 二分的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #651 (Div. 2) E - Binary Subsequence Rotation 思维
Codeforces Round #651 (Div. 2) C. Number Game (博弈,数学)
Codeforces Round #651 (Div. 2) D. Odd-Even Subsequence(二分)
Codeforces Round #651 (Div. 2) D - Odd-Even Subsequence 二分