采用二分法,求配对的最小的的最大值即可
#include<bits/stdc++.h>
using namespace std;
const int N=500050;
int a[N];
int n;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
//最小的最大值
int l=0,r=n/2;//最大配对n/2对
while(l<r){
int mid=(l+r+1)/2;
int flag=0;
for(int i=mid;i>=1;i--){
if(a[i]*2<=a[n-mid+i]){
continue;
}
else{
flag=1;
break;
}
}
if(flag) r=mid-1;
else l=mid;
}
cout<<n-l<<endl;
return 0;
}