排序后二分
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = 1e6 + 50;
int a[maxn];
int s = 0;
int maxi = 0;
int n;
int judge(int k){
for(int i = 1, j = k + 1; i <= k; i++, j++){
for(; a[j] < 2 * a[i] && j <= n; ) j++;
if(j > n) return 0;
}
return 1;
}
int main(){
scanf("%d", &n);
int l = 1, r = n, ans = 0;
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}
sort(a + 1, a + 1 + n);
while(l <= r){
int mid = (l + r) >> 1;
if(judge(mid)){
ans = mid;
l = mid + 1;
}else r = mid - 1;
}
printf("%d\n", n - ans);
return 0;
}