#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