#10774. 分治算法(NOIP2015)中位数

分治算法(NOIP2015)中位数

(NOIP2015)中位数

给定n(n为奇数且小于1000)个整数,整数的范围在0~m(0<m<2^31)之间,请使用二分法求这n个整数的中位数。所谓中位数,是指将这n个数排序之后,排在正中间的数。

#include<iostream>
using namespace std;
const int MAXN=1000;
int n,i,lbound,rbound,mid,m;
int x[MAXN];

int main() {
    cin>>n>>m;
    for(i=0;i<n;i++)
        cin>>x[i];
    lbound=0;
    rbound=m;
    while(①) {
        mid=(lbound+rbound)/2;
        ②;
        for(i=0;i<n;i++)
            if(③)
                ④;
        if(count>n/2)
            lbound=mid+1;
        else
            ⑤;
    }
    cout<<rbound<<endl;
    return 0;
}

①处应填( )。
{{ select(1) }}

  • lbound<rbound
  • lbound+1<rbound
  • lbound<=rbound
  • rbound-lbound>1

②处应填( )。
{{ select(2) }}

  • int count=0
  • int p=0
  • int count=1
  • int p=1

③处应填( )。
{{ select(3) }}

  • x[i]>x[p]
  • x[i]>=x[p]
  • mid<x[i]
  • x[mid]>i

④处应填( )。
{{ select(4) }}

  • p=i
  • p=max(p,i)
  • count*=1
  • count++

⑤处应填( )。
{{ select(5) }}

  • mid=rbound
  • rbound=mid+1
  • rbound=mid
  • rbound=mid-1