#include <bits/stdc++.h>
using namespace std;

typedef long long int LL;
typedef unsigned long long uLL;
typedef pair< int,int > ii;
typedef pair< int,ii > iii;
const int inf = 1e9;
const LL INF = 1e18;
const int N = 100005;
const int MOD = 1e9+7;
const double EPS = 1e-6;
const double PI = acos(-1.0);

int n;
int ara[ 5*N ];
bool carry[ 5*N ] , hide[ 5*N ];

int can( int id , int val ) {
    int lo = id+1 , hi = n , ret = -inf;
    while( lo <= hi ) {
        int mid = (lo+hi)/2;
        if( ara[mid] >= (2*val) ) {
            ret = mid;
            hi = mid-1;
        }
        else lo = mid+1;
    }
    return ret;
}
int main( int argc, char const *argv[] ) {
    scanf("%d",&n);
    for( int i = 1; i <= n; i++ ) {
        scanf("%d",&ara[i]);
    }
    sort( ara+1 , ara+n+1 );
    for( int i = 1; i <= n; i++ ) {
        int idx = can( i , ara[i] );
        if( idx != -inf ) {
            for( int j = i+1; j <= idx; j++ ) {
                if( !carry[j] ) {
                    carry[j] = true;
                    hide[i] = true;
                    break;
                }
            }
        }
    }
    int cnt = 0;
    for( int i = 1; i <= n; i++ ) {
        if( !hide[i] ) cnt++;
    }
    printf("%d\n",cnt);
    return 0;
}


#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mk make_pair
#define lw lower_bound
using namespace std;
ll a[1234567],ans,b,c,d,e,i,j,n,m,l,r;
multiset<ll> ms;
vector<ll> v;
pair<ll,ll> p[123456];
int main(){
	ios_base::sync_with_stdio();
	cin.tie();
	cout.tie();
	cin>>b;
	for(i=1;i<=b;i++){
		cin>>p[i].first;
	}
	sort(p+1,p+b+1);
	for(i=b;i>=1;i--){
		if(p[i].first*2<p[b].first){
			l=i;break;
		}
	}
	r=b;
	while(r>=b/2&&l>=1){
		if(p[l].first*2<=p[r].first){
			l--;
			r--;
			ans++;
		}
		else l--;
	}
	cout<<b-ans;
}


#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mk make_pair
#define lw lower_bound
using namespace std;
ll a[1234567],ans,b,c,d,e,i,j,n,m,l,r;
multiset<ll> ms;
vector<ll> v;
pair<ll,ll> p[123456];
int main(){
	ios_base::sync_with_stdio();
	cin.tie();
	cout.tie();
	cin>>b;
	for(i=1;i<=b;i++){
		cin>>p[i].first;
	}
	sort(p+1,p+b+1);
	r=b/2+1;
	l=1;
	while(r<=b&&l<=b/2){
		if(p[l].first*2<=p[r].first){
			l++;
			r++;
			ans++;
		}
		else r++;
	}
	cout<<b-ans;
}


#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mk make_pair
#define lw lower_bound
using namespace std;
ll a[1234567],ans,b,c,d,e,i,j,n,m,l,r;
multiset<ll> ms;
vector<ll> v;
pair<ll,ll> p[123456];
int main(){
	ios_base::sync_with_stdio();
	cin.tie();
	cout.tie();
	cin>>b;
	for(i=1;i<=b;i++){
		cin>>p[i].first;
	}
	sort(p+1,p+b+1);
	l=1;
	r=b/2;
	while(r<=b){
		if(p[l].second==1){
			l++;
			continue;
		}
		if(p[l].first*2<=p[r].first&&p[l].second==0&&p[r].second==0){
			p[l].second=1;
			p[r].second=1;
			l++;
			r++;
			ans++;
		}
		r++;
	}
	cout<<b-ans;
}


#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mk make_pair
#define lw lower_bound
using namespace std;
ll a[1234567],ans,b,c,d,e,i,j,n,m,l,r;
multiset<ll> ms;
vector<ll> v;
pair<ll,ll> p[123456];
int main(){
	ios_base::sync_with_stdio();
	cin.tie();
	cout.tie();
	cin>>b;
	for(i=1;i<=b;i++){
		cin>>p[i].first;
	}
	sort(p+1,p+b+1);
	r=b/2;
	l=1;
	while(r<=b&&l<b/2){
		if(p[l].first*2<=p[r].first){
			l++;
			r++;
			ans++;
		}
		else r++;
	}
	cout<<b-ans;
}


#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mk make_pair
#define lw lower_bound
using namespace std;
ll a[1234567],ans,b,c,d,e,i,j,n,m,l,r;
multiset<ll> ms;
vector<ll> v;
ll p[1234567];
int main(){
	ios_base::sync_with_stdio();
	cin.tie();
	cout.tie();
	cin>>b;
	for(i=1;i<=b;i++){
		cin>>p[i];
	}
	sort(p+1,p+b+1);
	r=b/2+1;
	l=1;
	while(r<=b&&l<=b/2){
		if(p[l]*2<=p[r]){
			l++;
			r++;
			ans++;
		}
		else r++;
	}
	cout<<b-ans;
}


#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mk make_pair
#define lw lower_bound
using namespace std;
ll a[1234567],ans,b,c,d,e,i,j,n,m;
multiset<ll> ms;
vector<ll> v;
int main(){
	ios_base::sync_with_stdio();
	cin.tie();
	cout.tie();
	cin>>b;
	for(i=1;i<=b;i++){
		cin>>a[i];
		ms.insert(a[i]);
		v.pb(a[i]);
	}
	n=a[b];
	for(i=v.size()-1;i>=0;i--){
		if(n/2>v[i])break;
		d=v[i]/2;
		auto e=ms.lw(d);
		if(*e>d&&e!=ms.begin()){
			e--;
			//cout<<d<<" "<<*e<<endl;
			ms.erase(e);
			ans++;
			continue;
		}
		if(*e<=d){
			//cout<<d<<" "<<*e<<endl;
			ms.erase(e);
			ans++;
		}
	}
	cout<<b-ans;
}


#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mk make_pair
#define lw lower_bound
using namespace std;
ll a[1234567],ans,b,c,d,e,i,j,n,m,l,r;
multiset<ll> ms;
vector<ll> v;
pair<ll,ll> p[123456];
int main(){
	ios_base::sync_with_stdio();
	cin.tie();
	cout.tie();
	cin>>b;
	for(i=1;i<=b;i++){
		cin>>p[i].first;
	}
	sort(p+1,p+b+1);
	for(i=b;i>=1;i--){
		if(p[i].first*2<=p[b].first){
			l=i;break;
		}
	}
	r=b;
	while(r>=b/2&&l>=1){
		if(p[l].first*2<=p[r].first){
			l--;
			r--;
			ans++;
		}
		else l--;
	}
	cout<<b-ans;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define mem(a,x) memset(a,x,sizeof(a))
int a[10000007];
long long int c1=0;
vector<int> v2;
lli p;
typedef pair<lli,lli> ll;
bool cmp(string s,string p)
{
    if(s.length()==p.length())
    return s<p;
    return s.length()<p.length();
}
int a1[1000007];
int flag=1;
void dfs(vector<int> v[],int y)
{
    if(y==p)
    a1[y]=1;
    a[y]=1;
    for(int j=0;j<v[y].size();j++)
    {
        if(a[v[y][j]]==0)
        {
            if(a1[y]==1)
            a1[v[y][j]]=0;
            else
            a1[v[y][j]]=1;
            dfs(v,v[y][j]);
        }
                if(a1[y]==a1[v[y][j]])
                flag=0;
    }
}
int a2[1000000];
main()
{
    lli k,x,y;x=-1;
    int n;
    int c=0;
    int c1=0;
    cin>>n;
    map<int,int> m;
    vector<int> a(n,0);
    int a1[n];
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        a[i-1]=x;
        a1[i-1]=x;
        m[x]++;
    }
    sort(a.begin(),a.end());
    lli s=0;
    mem(a2,0);
    for(int i=1;i<=n/2;i++)
    {
     if(lower_bound(a.begin()+n/2,a.end(),2*a[i-1])!=a.end())
     {
         continue;
     }
     else
     s+=1;
    }
    if(n%2==0)
    cout<<s+n/2;
    else
    cout<<s+(n+1)/2;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define mem(a,x) memset(a,x,sizeof(a))
int a[10000007];
long long int c1=0;
vector<int> v2;
lli p;
typedef pair<lli,lli> ll;
bool cmp(string s,string p)
{
    if(s.length()==p.length())
    return s<p;
    return s.length()<p.length();
}
int a1[1000007];
int flag=1;
void dfs(vector<int> v[],int y)
{
    if(y==p)
    a1[y]=1;
    a[y]=1;
    for(int j=0;j<v[y].size();j++)
    {
        if(a[v[y][j]]==0)
        {
            if(a1[y]==1)
            a1[v[y][j]]=0;
            else
            a1[v[y][j]]=1;
            dfs(v,v[y][j]);
        }
                if(a1[y]==a1[v[y][j]])
                flag=0;
    }
}
int a2[1000000];
main()
{
    lli k,x,y;x=-1;
    int n;
    int c=0;
    int c1=0;
    cin>>n;
    map<int,int> m;
    vector<int> a(n,0);
    int a1[n];
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        a[i-1]=x;
        a1[i-1]=x;
        m[x]++;
    }
    sort(a1,a1+n);
    sort(a.begin(),a.end());
    lli s=0;
    mem(a2,0);
    for(int i=1;i<=n;i++)
    {
        if((lower_bound(a.begin(),a.end(),2*a1[i-1])!=a.end()))
        {
            m[*lower_bound(a.begin(),a.end(),2*a1[i-1])]-=1;
            if(m[*lower_bound(a.begin(),a.end(),2*a1[i-1])]==0)
            a.erase(lower_bound(a.begin(),a.end(),2*a1[i-1]));
        }
        else
        s+=1;
    }
    cout<<s;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define mem(a,x) memset(a,x,sizeof(a))
int a[10000007];
long long int c1=0;
vector<int> v2;
lli p;
typedef pair<lli,lli> ll;
bool cmp(string s,string p)
{
    if(s.length()==p.length())
    return s<p;
    return s.length()<p.length();
}
int a1[1000007];
int flag=1;
void dfs(vector<int> v[],int y)
{
    if(y==p)
    a1[y]=1;
    a[y]=1;
    for(int j=0;j<v[y].size();j++)
    {
        if(a[v[y][j]]==0)
        {
            if(a1[y]==1)
            a1[v[y][j]]=0;
            else
            a1[v[y][j]]=1;
            dfs(v,v[y][j]);
        }
                if(a1[y]==a1[v[y][j]])
                flag=0;
    }
}
int a2[1000000];
main()
{
    lli k,x,y;x=-1;
    int n;
    int c=0;
    int c1=0;
    cin>>n;
    map<int,int> m;
    vector<int> a(n,0);
    int a1[n];
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        a[i-1]=x;
        a1[i-1]=x;
        m[x]++;
    }
    sort(a1,a1+n);
    sort(a.begin(),a.end());
    lli s=0;
    mem(a2,0);
    for(int i=1;i<=n;i++)
    {
        if((lower_bound(a.begin(),a.end(),2*a1[i-1])!=a.end()))
        {
            m[*lower_bound(a.begin(),a.end(),2*a1[i-1])]-=1;
            a.erase(lower_bound(a.begin(),a.end(),2*a1[i-1]));
            if(*lower_bound(a.begin(),a.end(),a1[i-1])==a1[i-1])
            a.erase(lower_bound(a.begin(),a.end(),a1[i-1]));
        }
        else
        s+=1;
    }
    cout<<s;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define mem(a,x) memset(a,x,sizeof(a))
int a[10000007];
long long int c1=0;
vector<int> v2;
lli p;
typedef pair<lli,lli> ll;
bool cmp(string s,string p)
{
    if(s.length()==p.length())
    return s<p;
    return s.length()<p.length();
}
int a1[1000007];
int flag=1;
void dfs(vector<int> v[],int y)
{
    if(y==p)
    a1[y]=1;
    a[y]=1;
    for(int j=0;j<v[y].size();j++)
    {
        if(a[v[y][j]]==0)
        {
            if(a1[y]==1)
            a1[v[y][j]]=0;
            else
            a1[v[y][j]]=1;
            dfs(v,v[y][j]);
        }
                if(a1[y]==a1[v[y][j]])
                flag=0;
    }
}
int a2[1000000];
main()
{
    lli k,x,y;x=-1;
    int n;
    int c=0;
    int c1=0;
    cin>>n;
    map<lli,int> m;
    vector<lli> a(n,0);
    int a1[n];
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        a[i-1]=x;
        a1[i-1]=x;
        m[x]++;
    }
    sort(a.begin(),a.end());
    lli s=0;
    mem(a2,0);
    for(int i=1;i<=n/2;i++)
    {
     if(lower_bound(a.begin()+n/2,a.end(),2*a[i-1])!=a.end())
     {
         *lower_bound(a.begin()+n/2,a.end(),2*a[i-1])=-1;
     }
     else
     s+=1;
    }
    if(n%2==0)
    cout<<s+n/2;
    else
    cout<<s+(n+1)/2;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define mem(a,x) memset(a,x,sizeof(a))
int a[10000007];
long long int c1=0;
vector<int> v2;
lli p;
typedef pair<lli,lli> ll;
bool cmp(string s,string p)
{
    if(s.length()==p.length())
    return s<p;
    return s.length()<p.length();
}
int a1[1000007];
int flag=1;
void dfs(vector<int> v[],int y)
{
    if(y==p)
    a1[y]=1;
    a[y]=1;
    for(int j=0;j<v[y].size();j++)
    {
        if(a[v[y][j]]==0)
        {
            if(a1[y]==1)
            a1[v[y][j]]=0;
            else
            a1[v[y][j]]=1;
            dfs(v,v[y][j]);
        }
                if(a1[y]==a1[v[y][j]])
                flag=0;
    }
}
int a2[1000000];
main()
{
    lli k,x,y;x=-1;
    int n;
    int c=0;
    int c1=0;
    cin>>n;
    map<int,int> m;
    vector<int> a(n,0);
    int a1[n];
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        a[i-1]=x;
        a1[i-1]=x;
        m[x]++;
    }
    sort(a.begin(),a.end());
    lli s=0;
    mem(a2,0);
    for(int i=1;i<=n/2;i++)
    {
     if(2*a[i-1]<=a[n/2+i-1])
     continue;
     else
     s+=1;
    }
    if(n%2==0)
    cout<<s+n/2;
    else
    cout<<s+(n+1)/2;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define mem(a,x) memset(a,x,sizeof(a))
int a[10000007];
long long int c1=0;
vector<int> v2;
lli p;
typedef pair<lli,lli> ll;
bool cmp(string s,string p)
{
    if(s.length()==p.length())
    return s<p;
    return s.length()<p.length();
}
int a1[1000007];
int flag=1;
void dfs(vector<int> v[],int y)
{
    if(y==p)
    a1[y]=1;
    a[y]=1;
    for(int j=0;j<v[y].size();j++)
    {
        if(a[v[y][j]]==0)
        {
            if(a1[y]==1)
            a1[v[y][j]]=0;
            else
            a1[v[y][j]]=1;
            dfs(v,v[y][j]);
        }
                if(a1[y]==a1[v[y][j]])
                flag=0;
    }
}
int a2[1000000];
main()
{
    lli k,x,y;x=-1;
    int n;
    int c=0;
    int c1=0;
    cin>>n;
    map<int,int> m;
    vector<int> a(n,0);
    int a1[n];
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        a[i-1]=x;
        a1[i-1]=x;
        m[x]++;
    }
    sort(a1,a1+n);
    sort(a.begin(),a.end());
    lli s=0;
    mem(a2,0);
    for(int i=1;i<=n;i++)
    {
        if((lower_bound(a.begin(),a.end(),2*a1[i-1])!=a.end()))
        {
            m[*lower_bound(a.begin(),a.end(),2*a1[i-1])]-=1;
            a.erase(lower_bound(a.begin(),a.end(),2*a1[i-1]));
        }
        else
        s+=1;
    }
    cout<<s;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define mem(a,x) memset(a,x,sizeof(a))
int a[10000007];
long long int c1=0;
vector<int> v2;
lli p;
typedef pair<lli,lli> ll;
bool cmp(string s,string p)
{
    if(s.length()==p.length())
    return s<p;
    return s.length()<p.length();
}
int a1[1000007];
int flag=1;
void dfs(vector<int> v[],int y)
{
    if(y==p)
    a1[y]=1;
    a[y]=1;
    for(int j=0;j<v[y].size();j++)
    {
        if(a[v[y][j]]==0)
        {
            if(a1[y]==1)
            a1[v[y][j]]=0;
            else
            a1[v[y][j]]=1;
            dfs(v,v[y][j]);
        }
                if(a1[y]==a1[v[y][j]])
                flag=0;
    }
}
int a2[1000000];
main()
{
    lli k,x,y;x=-1;
    int n;
    int c=0;
    int c1=0;
    cin>>n;
    map<int,int> m;
    vector<int> a(n,0);
    int a1[n];
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        a[i-1]=x;
        a1[i-1]=x;
        m[x]++;
    }
    sort(a.begin(),a.end());
    lli s=0;
    mem(a2,0);
    for(int i=1;i<=n/2;i++)
    {
     if(lower_bound(a.begin()+n/2,a.end(),2*a[i-1])!=a.end())
     {
         a.erase(lower_bound(a.begin()+n/2,a.end(),2*a[i-1]));
     }
     else
     s+=1;
    }
    if(n%2==0)
    cout<<s+n/2;
    else
    cout<<s+(n+1)/2;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define mem(a,x) memset(a,x,sizeof(a))
int a[10000007];
long long int c1=0;
vector<int> v2;
lli p;
typedef pair<lli,lli> ll;
bool cmp(string s,string p)
{
    if(s.length()==p.length())
    return s<p;
    return s.length()<p.length();
}
int a1[1000007];
int flag=1;
void dfs(vector<int> v[],int y)
{
    if(y==p)
    a1[y]=1;
    a[y]=1;
    for(int j=0;j<v[y].size();j++)
    {
        if(a[v[y][j]]==0)
        {
            if(a1[y]==1)
            a1[v[y][j]]=0;
            else
            a1[v[y][j]]=1;
            dfs(v,v[y][j]);
        }
                if(a1[y]==a1[v[y][j]])
                flag=0;
    }
}
int a2[1000000];
main()
{
    lli k,x,y;x=-1;
    int n;
    int c=0;
    int c1=0;
    cin>>n;
    map<int,int> m;
    vector<int> a(n,0);
    int a1[n];
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        a[i-1]=x;
        a1[i-1]=x;
        m[x]++;
    }
    sort(a.begin(),a.end());
    lli s=0;
    mem(a2,0);
    for(int i=n;i>=1;i--)
    {
     if(lower_bound(a.begin(),a.end(),2*a[i-1])!=a.end())
     {
         a.erase(lower_bound(a.begin(),a.end(),a[i-1]));
     }
     else
     s+=1;
    }
    cout<<s;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define mem(a,x) memset(a,x,sizeof(a))
int a[10000007];
long long int c1=0;
vector<int> v2;
lli p;
typedef pair<lli,lli> ll;
bool cmp(string s,string p)
{
    if(s.length()==p.length())
    return s<p;
    return s.length()<p.length();
}
int a1[1000007];
int flag=1;
void dfs(vector<int> v[],int y)
{
    if(y==p)
    a1[y]=1;
    a[y]=1;
    for(int j=0;j<v[y].size();j++)
    {
        if(a[v[y][j]]==0)
        {
            if(a1[y]==1)
            a1[v[y][j]]=0;
            else
            a1[v[y][j]]=1;
            dfs(v,v[y][j]);
        }
                if(a1[y]==a1[v[y][j]])
                flag=0;
    }
}
int a2[1000000];
main()
{
    lli k,x,y;x=-1;
    int n;
    int c=0;
    int c1=0;
    cin>>n;
    map<int,int> m;
    vector<int> a(n,0);
    int a1[n];
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        a[i-1]=x;
        a1[i-1]=x;
        m[x]++;
    }
    sort(a1,a1+n);
    sort(a.begin(),a.end());
    lli s=0;
    mem(a2,0);
    for(int i=1;i<=n;i++)
    {
        if((lower_bound(a.begin(),a.end(),2*a1[i-1])!=a.end()))
        {
            a.erase(lower_bound(a.begin(),a.end(),2*a1[i-1]));
        }
        else
        s+=1;
    }
    cout<<s;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define mem(a,x) memset(a,x,sizeof(a))
int a[10000007];
long long int c1=0;
vector<int> v2;
lli p;
typedef pair<lli,lli> ll;
bool cmp(string s,string p)
{
    if(s.length()==p.length())
    return s<p;
    return s.length()<p.length();
}
int a1[1000007];
int flag=1;
void dfs(vector<int> v[],int y)
{
    if(y==p)
    a1[y]=1;
    a[y]=1;
    for(int j=0;j<v[y].size();j++)
    {
        if(a[v[y][j]]==0)
        {
            if(a1[y]==1)
            a1[v[y][j]]=0;
            else
            a1[v[y][j]]=1;
            dfs(v,v[y][j]);
        }
                if(a1[y]==a1[v[y][j]])
                flag=0;
    }
}
int a2[1000000];
main()
{
    lli k,x,y;x=-1;
    int n;
    int c=0;
    int c1=0;
    cin>>n;
    map<int,int> m;
    vector<int> a(n,0);
    int a1[n];
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        a[i-1]=x;
        a1[i-1]=x;
        m[x]++;
    }
    sort(a.begin(),a.end());
    lli s=0;
    mem(a2,0);
    for(int i=1;i<=n/2;i++)
    {
     if(lower_bound(a.begin()+n/2-1,a.end(),2*a[i-1])!=a.end())
     {
         a.erase(lower_bound(a.begin()+n/2-1,a.end(),2*a[i-1]));
     }
     else
     s+=1;
    }
    if(n%2==0)
    cout<<s+n/2;
    else
    cout<<s+(n+1)/2;
}


#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
using namespace std;

#define SET(p) memset(p, -1, sizeof(p))
#define CLR(p) memset(p, 0, sizeof(p))
#define MEM(p, v) memset(p, v, sizeof(p))
#define CPY(d, s) memcpy(d, s, sizeof(s))
#define ll long long
#define ld long double
#define mod 1000000007
#define inf 1LL<<60
#define pii pair< int, int >
#define pll pair< ll, ll >
#define psi pair< string, int >
#define N 100010
int main(int argc, char const *argv[])
{
	int n;
	scanf("%d",&n);
	int a[n];
	for(int i=0;i<n;i++)
		scanf("%d",a+i);
	sort(a,a+n);
	int r = n/2;
	int ans = n;
	for(int i=0;i<n/2 && r<n;i++){
		while(r<n && 2*a[i]>a[r])
			r++;
		if(r<n){
			ans--;
			r++;
		}
	}
	printf("%d\n", ans);
	return 0;
}


#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
using namespace std;

#define SET(p) memset(p, -1, sizeof(p))
#define CLR(p) memset(p, 0, sizeof(p))
#define MEM(p, v) memset(p, v, sizeof(p))
#define CPY(d, s) memcpy(d, s, sizeof(s))
#define ll long long
#define ld long double
#define mod 1000000007
#define inf 1LL<<60
#define pii pair< int, int >
#define pll pair< ll, ll >
#define psi pair< string, int >
#define N 100010
int main(int argc, char const *argv[])
{
	int n;
	scanf("%d",&n);
	int a[n];
	for(int i=0;i<n;i++)
		scanf("%d",a+i);
	sort(a,a+n);
	int r = n-1;
	int ans = 0;
	for(int i=n-1;i>=0 && r>=0;i--){
		if(2*a[i]<=a[r]){
			a[i] = -1;
			a[r] = -1;
			ans++;
			while(r>=0 && a[r]==-1)
				r--;
		}
	}
	for(int i=0;i<n;i++)
		if(a[i]!=-1)
			ans++;
	printf("%d\n", ans);
	return 0;
}


#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
using namespace std;

#define SET(p) memset(p, -1, sizeof(p))
#define CLR(p) memset(p, 0, sizeof(p))
#define MEM(p, v) memset(p, v, sizeof(p))
#define CPY(d, s) memcpy(d, s, sizeof(s))
#define ll long long
#define ld long double
#define mod 1000000007
#define inf 1LL<<60
#define pii pair< int, int >
#define pll pair< ll, ll >
#define psi pair< string, int >
#define N 100010
int main(int argc, char const *argv[])
{
	int n;
	scanf("%d",&n);
	int a[n];
	for(int i=0;i<n;i++)
		scanf("%d",a+i);
	sort(a,a+n);
	int r = n-1;
	int ans = n;
	for(int i=n/2;i>=0 && r>=n/2;i--){
		while(r>=n/2 && 2*a[i]<=a[r])
			r--;
		if(r>=n/2 && 2*a[i]<=a[r]){
			a[i] = -1;
			a[r] = -1;
			ans--;
			while(r>=n/2 && a[r]==-1)
				r--;
		}
	}
	printf("%d\n", ans);
	return 0;
}


#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
using namespace std;

#define SET(p) memset(p, -1, sizeof(p))
#define CLR(p) memset(p, 0, sizeof(p))
#define MEM(p, v) memset(p, v, sizeof(p))
#define CPY(d, s) memcpy(d, s, sizeof(s))
#define ll long long
#define ld long double
#define mod 1000000007
#define inf 1LL<<60
#define pii pair< int, int >
#define pll pair< ll, ll >
#define psi pair< string, int >
#define N 100010
int main(int argc, char const *argv[])
{
	int n;
	scanf("%d",&n);
	int a[n];
	for(int i=0;i<n;i++)
		scanf("%d",a+i);
	sort(a,a+n);
	int r = n-1;
	for(int i=n-1;i>=0;i--){
		if(2*a[i]<=a[r]){
			a[i] = -1;
			r--;
			while(r>=i-1 && a[r]==-1)
				r--;
		}
	}
	int ans = 0;
	for(int i=0;i<n;i++)
		if(a[i]!=-1)
			ans++;
	printf("%d\n", ans);
	return 0;
}


#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
using namespace std;

#define SET(p) memset(p, -1, sizeof(p))
#define CLR(p) memset(p, 0, sizeof(p))
#define MEM(p, v) memset(p, v, sizeof(p))
#define CPY(d, s) memcpy(d, s, sizeof(s))
#define ll long long
#define ld long double
#define mod 1000000007
#define inf 1LL<<60
#define pii pair< int, int >
#define pll pair< ll, ll >
#define psi pair< string, int >
#define N 100010
int main(int argc, char const *argv[])
{
	int n;
	scanf("%d",&n);
	int a[n];
	for(int i=0;i<n;i++)
		scanf("%d",a+i);
	sort(a,a+n);
	int r = n-1;
	for(int i=n-1;i>=0;i--){
		if(2*a[i]<=a[r]){
			a[i] = -1;
			r--;
			while(r>=0 && a[r]==-1)
				r--;
		}
	}
	int ans = 0;
	for(int i=0;i<n;i++)
		if(a[i]!=-1)
			ans++;
	printf("%d\n", ans);
	return 0;
}


#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
using namespace std;

#define SET(p) memset(p, -1, sizeof(p))
#define CLR(p) memset(p, 0, sizeof(p))
#define MEM(p, v) memset(p, v, sizeof(p))
#define CPY(d, s) memcpy(d, s, sizeof(s))
#define ll long long
#define ld long double
#define mod 1000000007
#define inf 1LL<<60
#define pii pair< int, int >
#define pll pair< ll, ll >
#define psi pair< string, int >
#define N 100010
int main(int argc, char const *argv[])
{
	int n;
	scanf("%d",&n);
	int a[n];
	for(int i=0;i<n;i++)
		scanf("%d",a+i);
	sort(a,a+n);
	int r = n-1;
	int ans = n;
	for(int i=n-1;i>=0 && r>=0;i--){
		if(2*a[i]<=a[r]){
			a[i] = -1;
			a[r] = -1;
			ans--;
			while(r>=0 && a[r]==-1)
				r--;
		}
	}
	printf("%d\n", ans);
	return 0;
}


#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
using namespace std;

#define SET(p) memset(p, -1, sizeof(p))
#define CLR(p) memset(p, 0, sizeof(p))
#define MEM(p, v) memset(p, v, sizeof(p))
#define CPY(d, s) memcpy(d, s, sizeof(s))
#define ll long long
#define ld long double
#define mod 1000000007
#define inf 1LL<<60
#define pii pair< int, int >
#define pll pair< ll, ll >
#define psi pair< string, int >
#define N 100010
int main(int argc, char const *argv[])
{
	int n;
	scanf("%d",&n);
	int a[n];
	for(int i=0;i<n;i++)
		scanf("%d",a+i);
	sort(a,a+n);
	int r = n/2;
	int ans = n;
	for(int i=0;i<n/2 && r<n;i++){
		while(r<n && 2*a[i]>a[r])
			r++;
		if(r<n){
			ans--;
		}
	}
	printf("%d\n", ans);
	return 0;
}


#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
using namespace std;

#define SET(p) memset(p, -1, sizeof(p))
#define CLR(p) memset(p, 0, sizeof(p))
#define MEM(p, v) memset(p, v, sizeof(p))
#define CPY(d, s) memcpy(d, s, sizeof(s))
#define ll long long
#define ld long double
#define mod 1000000007
#define inf 1LL<<60
#define pii pair< int, int >
#define pll pair< ll, ll >
#define psi pair< string, int >
#define N 100010
int main(int argc, char const *argv[])
{
	int n;
	scanf("%d",&n);
	int a[n];
	for(int i=0;i<n;i++)
		scanf("%d",a+i);
	sort(a,a+n);
	int r = n-1;
	int ans = n;
	for(int i=n/2;i>=0 && r>=0;i--){
		if(2*a[i]<=a[r]){
			a[i] = -1;
			a[r] = -1;
			ans--;
			while(r>=0 && a[r]==-1)
				r--;
		}
	}
	printf("%d\n", ans);
	return 0;
}


#include<bits/stdc++.h>
#define ll long long
#define eps 0.000000001
#define inf 1000000000000
using namespace std;

vector <ll> ar;
bool used[1000000];

int main(){
	ll n;
	cin>>n;
	ar.resize(n);
	for (ll i = 0; i < n; ++i){
		cin>>ar[i];
	}
	sort(ar.begin(), ar.end());
	ll ans = 0;
	for (ll i = 0, j = 0;;){
		while ((ar[i] * 2 > ar[j]) && (j < n)) ++j;
		if (j == n) break;
		++i;
		++ans;
	}
	cout<<n - ans;
}


#include<bits/stdc++.h>
#define ll long long
#define eps 0.000000001
#define inf 1000000000
using namespace std;

int main(){
	ll n;
	vector <ll> ar;
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n;
	ar.resize(n);
	vector <bool> used;
	used.resize(n);
	for (ll i = 0; i < n; ++i){
		cin>>ar[i];
		used[i] = false;
	}
	sort(ar.begin(), ar.end());
	/*for (ll i = 0; i < n; ++i){
		cout<<ar[i]<<" ";
	}
	cout<<endl;*/
	ll i = n / 2;
	ll j = 0;
	//cout<<j<<"***"<<endl;
	ll ans = 0;
	while ((j < n) && (i < n)){
		//cout<<ar[i]<<" "<<ar[j]<<" "<<used[i]
		if (used[j]){
			//cout<<ar[i]<<"*"<<endl;
			++j;
			continue;
		}
		if (ar[j] * 2 > ar[i]){
			//cout<<ar[i]<<" "<<ar[j]<<"%"<<endl;
			++i;
			continue;
		}
		used[i] = true;
		++ans;
		//cout<<ar[i]<<" "<<ar[j]<<endl;
		++i;
		++j;
	}
	cout<<n - ans;
}


#include<bits/stdc++.h>
#define ll long long
#define eps 0.000000001
#define inf 1000000000000
using namespace std;

vector <ll> ar;
bool used[1000000];

int main(){
	ll n;
	cin>>n;
	ar.resize(n);
	for (ll i = 0; i < n; ++i){
		cin>>ar[i];
	}
	sort(ar.begin(), ar.end());
	//for (ll i = 0; i < n; ++i) cout<<ar[i]<<" ";
	//cout<<endl;
	ll ans = 0;
	for (ll i = n - 1, j = n - 1;;){
		while ((j >= 0) && (used[j])) --j;
		while ((i >= 0) && (ar[i] * 2 > ar[j])) --i;
		if (i < 0) break;
		used[i] = true;
		--i;
		++ans;
		--j;
	}
	cout<<n - ans;
}//2 2 4 5 6 7 8 9


#include<bits/stdc++.h>
#define ll long long
#define eps 0.000000001
#define inf 1000000000
using namespace std;

int main(){
	ll n;
	vector <ll> ar;
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n;
	ar.resize(n);
	vector <bool> used;
	used.resize(n);
	for (ll i = 0; i < n; ++i){
		cin>>ar[i];
		used[i] = false;
	}
	sort(ar.begin(), ar.end());
	/*for (ll i = 0; i < n; ++i){
		cout<<ar[i]<<" ";
	}
	cout<<endl;*/
	ll i;
	for (i = n - 1; i >= 0; --i){
		if (ar[i] * 2 <= ar[n - 1]) break;
	}
	ll j = i;
	//cout<<j<<"***"<<endl;
	ll ans = 0;
	i = n - 1;
	while ((j >= 0) && (i >= 0)){
		//cout<<ar[i]<<" "<<ar[j]<<" "<<used[i]
		if (used[i]){
			--i;
			continue;
		}
		if (ar[j] * 2 > ar[i]){
			--j;
			continue;
		}
		used[j] = true;
		++ans;
		--i;
		--j;
	}
	cout<<n - ans;
}


#include<bits/stdc++.h>
#define ll long long
#define eps 0.000000001
#define inf 1000000000
using namespace std;

int main(){
	ll n;
	vector <ll> ar;
	cin>>n;
	ar.resize(n);
	vector <bool> used;
	used.resize(n);
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	for (ll i = 0; i < n; ++i){
		cin>>ar[i];
		used[i] = false;
	}
	sort(ar.begin(), ar.end());
	/*for (ll i = 0; i < n; ++i){
		cout<<ar[i]<<" ";
	}
	cout<<endl;*/
	ll i;
	for (i = n - 1; i >= 0; --i){
		if (ar[i] * 2 <= ar[n - 1]) break;
	}
	ll j = i;
	//cout<<j<<"***"<<endl;
	ll ans = 0;
	i = n - 1;
	while ((j >= 0) && (i >= 0)){
		//cout<<ar[i]<<" "<<ar[j]<<" "<<used[i]
		if (used[i]){
			--i;
			continue;
		}
		if (ar[j] * 2 > ar[i]){
			--j;
			continue;
		}
		used[j] = true;
		++ans;
		--i;
		--j;
	}
	cout<<n - ans;
}


#include<bits/stdc++.h>
#define ll long long
#define eps 0.000000001
#define inf 1000000000
using namespace std;

int main(){
	ll n;
	vector <ll> ar;
	cin>>n;
	ar.resize(n);
	vector <bool> used;
	used.resize(n);
	ios_base::sync_with_stdio(0);
	cin.tie(NULL);
	for (ll i = 0; i < n; ++i){
		cin>>ar[i];
	}
	sort(ar.begin(), ar.end());
	/*for (ll i = 0; i < n; ++i){
		cout<<ar[i]<<" ";
	}
	cout<<endl;*/
	ll i;
	for (i = n - 1; i >= 0; --i){
		if (ar[i] * 2 <= ar[n - 1]) break;
	}
	ll j = i;
	//cout<<j<<"***"<<endl;
	ll ans = 0;
	i = n - 1;
	while ((j >= 0) && (i >= 0)){
		//cout<<ar[i]<<" "<<ar[j]<<" "<<used[i]
		if (used[i]){
			--i;
			continue;
		}
		if (ar[j] * 2 > ar[i]){
			--j;
			continue;
		}
		used[j] = true;
		++ans;
		--i;
		--j;
	}
	cout<<n - ans;
}


#include<bits/stdc++.h>
#define ll long long
#define eps 0.000000001
#define inf 1000000000
using namespace std;

int main(){
	ll n;
	vector <ll> ar;
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n;
	ar.resize(n);
	vector <bool> used;
	used.resize(n);
	for (ll i = 0; i < n; ++i){
		cin>>ar[i];
		used[i] = false;
	}
	sort(ar.begin(), ar.end());
	/*for (ll i = 0; i < n; ++i){
		cout<<ar[i]<<" ";
	}
	cout<<endl;*/
	ll i = n / 2;
	ll j = 0;
	//cout<<j<<"***"<<endl;
	ll ans = 0;
	while ((j < n) && (i < n)){
		//cout<<ar[i]<<" "<<ar[j]<<" "<<used[i]
		if (used[j]){
			cout<<ar[i]<<"*"<<endl;
			++j;
			continue;
		}
		if (ar[j] * 2 > ar[i]){
			//cout<<ar[i]<<" "<<ar[j]<<"%"<<endl;
			++i;
			continue;
		}
		used[i] = true;
		++ans;
		//cout<<ar[i]<<" "<<ar[j]<<endl;
		++i;
		++j;
	}
	cout<<n - ans;
}


#include<bits/stdc++.h>
#define ll long long
#define eps 0.000000001
#define inf 1000000000
using namespace std;

int main(){
	ll n;
	vector <ll> ar;
	cin>>n;
	ar.resize(n);
	vector <bool> used;
	used.resize(n);
	ios_base::sync_with_stdio(0);
	cin.tie(NULL);
	for (ll i = 0; i < n; ++i){
		cin>>ar[i];
		used[i] = false;
	}
	sort(ar.begin(), ar.end());
	/*for (ll i = 0; i < n; ++i){
		cout<<ar[i]<<" ";
	}
	cout<<endl;*/
	ll i;
	for (i = n - 1; i >= 0; --i){
		if (ar[i] * 2 <= ar[n - 1]) break;
	}
	ll j = i;
	//cout<<j<<"***"<<endl;
	ll ans = 0;
	i = n - 1;
	while ((j >= 0) && (i >= 0)){
		//cout<<ar[i]<<" "<<ar[j]<<" "<<used[i]
		if (used[i]){
			--i;
			continue;
		}
		if (ar[j] * 2 > ar[i]){
			--j;
			continue;
		}
		used[j] = true;
		++ans;
		--i;
		--j;
	}
	cout<<n - ans;
}


#include <bits/stdc++.h>

using namespace std;

int main() {
    int n; cin >> n;
    vector <int> bellysize(n);
    for (int i = 0; i < n; i++)
        cin >> bellysize[i];
    sort(bellysize.begin(), bellysize.end());
    int ans = n, i = 0, j = n / 2;
    while (i < j && j < n) {
        if (2 * bellysize[i] <= bellysize[j]) {
            i++; j++; ans--;
        }
        else j++;
    }
    cout << ans << endl;
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main() {
    int n; cin >> n;
    vector <int> bellysize(n);
    for (int i = 0; i < n; i++)
        cin >> bellysize[i];
    sort(bellysize.begin(), bellysize.end());

    int ans = n, j = n / 2;
    for (int i = 0; i < n / 2; i++) {
        while (j < n) {
            if (bellysize[i] * 2 <= bellysize[j]) {
                j += 1; ans -= 1;
                break;
            }
        }
        if (j == n)
            break;
    }
    cout << ans << endl;
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main() {
    int n; cin >> n;
    vector <int> bellysize(n);
    for (int i = 0; i < n; i++)
        cin >> bellysize[i];
    sort(bellysize.begin(), bellysize.end());

    int ans = n, j = n / 2;
    for (int i = 0; i < n / 2; i++) {
        while (j < n) {
            if (bellysize[i] * 2 <= bellysize[j]) {
                j += 1; ans -= 1;
                break;
            }
            else j++;
        }
        if (j == n)
            break;
    }
    cout << ans << endl;
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main() {
    int n; cin >> n;
    vector <long long int> bellysize(n);
    for (int i = 0; i < n; i++)
        cin >> bellysize[i];
    sort(bellysize.begin(), bellysize.end());
    int ans = n, i = 0, j = n / 2 + 1;
    while (i <= j && j < n) {
        if (2 * bellysize[i] <= bellysize[j]) {
            i++; j++; ans--;
        }
        else j++;
    }
    cout << ans << endl;
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main() {
    int n; cin >> n;
    vector <long long int> bellysize(n);
    for (int i = 0; i < n; i++)
        cin >> bellysize[i];
    sort(bellysize.begin(), bellysize.end());
    int ans = n, i = 0, j = n / 2;
    while (i <= j && j < n) {
        if (2 * bellysize[i] <= bellysize[j]) {
            i++; j++; ans--;
        }
        else j++;
    }
    cout << ans << endl;
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main() {
    int n; cin >> n;
    vector <int> bellysize(n);
    for (int i = 0; i < n; i++)
        cin >> bellysize[i];
    sort(bellysize.begin(), bellysize.end());

    int ans = n, i = 0, j = n / 2;
    while (j < n) {
        if ((2 * bellysize[i]) <= bellysize[j]) {
            i++; j++; ans--;
        }
        else j++;
    }
    cout << ans << endl;
    return 0;
}


#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int num;
    scanf("%d",&num);
    vector<int>vec;
    for(int i=0;i<num;i++)
    {
        int zan;
        scanf("%d",&zan);
        vec.push_back(zan);
    }
    sort(vec.begin(),vec.end());
    int pt=num/2;
    int ans=num;
    for(int i=0;i<num/2;i++)
    {
        for(;;)
        {
            if(vec[i]*2<=vec[pt])
            {
                ans--;
                pt++;
                break;
            }
            else
            {
                pt++;
            }
            if(pt==num)
            {
                break;
            }
        }
        if(pt==num)
        {
            break;
        }
    }
    printf("%d\n",ans);
}


#include <bits/stdc++.h>

using namespace std;

int main() {
    int n; cin >> n;
    vector <long long int> bellysize(n);
    for (int i = 0; i < n; i++)
        cin >> bellysize[i];
    sort(bellysize.begin(), bellysize.end());
    int ans = n, i = 0, j = n / 2;
    while (j < n) {
        if (2 * bellysize[i] <= bellysize[j]) {
            i++; j++; ans--;
        }
        else j++;
    }
    cout << ans << endl;
    return 0;
}


//****************************Bismillahir Rahmanir Rahim***************************??

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;

#define PB push_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'

const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const ll infLL = 9000000000000000000;
#define MOD 1000000007
//#define harmonic(n) 0.57721566490153286l+log(n)

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))

#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, int i) { return n&(1LL<<i); }
inline ll setBit(ll n, int i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, int i) { return n&(~(1LL<<i)); }

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }
inline ll modInverse(ll a) { return modPow(a, MOD-2); }
inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }

/*
bool seive[1010000];
vi prime;

void seiveGen(int limit) {
    limit += 100;
    int sqrtn = sqrt(limit);
    for(int i = 3; i <= sqrtn; i += 2) {
            if(!seive[i>>1]) {
                    for(int j = i * i; j < limit; j += i + i) {
                            seive[j>>1] = 1;
                    }
            }
    }
    prime.PB(2);
    for(int i = 3; i < limit; i += 2) {
            if(!seive[i>>1]) prime.PB(i);
    }
}
*/
/*
*******************************USE of STL***************************
v.erase(unique(v.begin(),v.end()),v.end());
    int a[]={..........};
    sort(a,a+n,greater<int>()); ///sort in descending order
    int z=sizeof(a)/sizeof(a[0]); ///size of array
    string s,x;
    transform(s.begin(),s.end(),s.begin(),::tolower);///change of uppercase to lowercase of any string
    int i;
    i=s.compare(x); ///compare two string like strcmp
    int n,m;
    i=log10(n)+1; ///how many digits in integer n
    i=abs(n-m); ///take absolute value
     copy(v.begin(),v.end(),back_inserter(q)); ///copying v vector to q
     s.find("AB"); ///search index Number of AB(substring) in string s
     remove(a,a+n,3); ///delete 3rd element from array
     ceil(2.3) /// Returns the smallest integer that is greater than or equal to x (i.e : rounds up the nearest integer) দশমিক যদি <=.৫ হয় তাহলে একযোগ করে প্রিন্ট করবে
     round(2.3)///return round value...like 2.3=2,,,2.5=3,,2.6=3;

     {
         ///int to string transfer///
         ostringstream temp; ///need a temp;
         int x;
         temp<<x;
         string s;
         s=temp.str(x); ///transfer
     }
     count(s.begin(), s.end(), 'a')///Count the number of occurrences of 'a' in a string s
*/

//
//debug
#ifdef ahasun
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif
//****************Source Code starting From here**************//

int main()
{
	int n,sum=0;
	cin>>n;
	int a[n+10];
	for(int i=0;i<n;i++)
		cin>>a[i];
	sort(a,a+n);
	int x;
	int q=n/2,p=n/2,z=0;
	for(int i=0;i<p;i++)
	{
		for(int j=q;j<n;j++)
		{
			if(a[i]<=a[j]/2)
			{
				q=j+1;
				sum++;
				break;
			}
			else
				q++;
			if(q==n)
			{
				z=1;
				break;
			}
		}
		if(z==1)
			break;
	}
	cout<<n-sum<<endl;
	return 0;
}


//****************************Bismillahir Rahmanir Rahim***************************??

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;

#define PB push_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'

const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const ll infLL = 9000000000000000000;
#define MOD 1000000007
//#define harmonic(n) 0.57721566490153286l+log(n)

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))

#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, int i) { return n&(1LL<<i); }
inline ll setBit(ll n, int i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, int i) { return n&(~(1LL<<i)); }

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }
inline ll modInverse(ll a) { return modPow(a, MOD-2); }
inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }

/*
bool seive[1010000];
vi prime;

void seiveGen(int limit) {
    limit += 100;
    int sqrtn = sqrt(limit);
    for(int i = 3; i <= sqrtn; i += 2) {
            if(!seive[i>>1]) {
                    for(int j = i * i; j < limit; j += i + i) {
                            seive[j>>1] = 1;
                    }
            }
    }
    prime.PB(2);
    for(int i = 3; i < limit; i += 2) {
            if(!seive[i>>1]) prime.PB(i);
    }
}
*/
/*
*******************************USE of STL***************************
v.erase(unique(v.begin(),v.end()),v.end());
    int a[]={..........};
    sort(a,a+n,greater<int>()); ///sort in descending order
    int z=sizeof(a)/sizeof(a[0]); ///size of array
    string s,x;
    transform(s.begin(),s.end(),s.begin(),::tolower);///change of uppercase to lowercase of any string
    int i;
    i=s.compare(x); ///compare two string like strcmp
    int n,m;
    i=log10(n)+1; ///how many digits in integer n
    i=abs(n-m); ///take absolute value
     copy(v.begin(),v.end(),back_inserter(q)); ///copying v vector to q
     s.find("AB"); ///search index Number of AB(substring) in string s
     remove(a,a+n,3); ///delete 3rd element from array
     ceil(2.3) /// Returns the smallest integer that is greater than or equal to x (i.e : rounds up the nearest integer) দশমিক যদি <=.৫ হয় তাহলে একযোগ করে প্রিন্ট করবে
     round(2.3)///return round value...like 2.3=2,,,2.5=3,,2.6=3;

     {
         ///int to string transfer///
         ostringstream temp; ///need a temp;
         int x;
         temp<<x;
         string s;
         s=temp.str(x); ///transfer
     }
     count(s.begin(), s.end(), 'a')///Count the number of occurrences of 'a' in a string s
*/

//
//debug
#ifdef ahasun
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif
//****************Source Code starting From here**************//

int main()
{
	int n,sum=0;
	cin>>n;
	int a[n+10];
	for(int i=0;i<n;i++)
		cin>>a[i];
	sort(a,a+n);
	int x;
	int q=n/2,p=n/2,z=0;
	for(int i=0;i<p;i++)
	{
		for(int j=q;j<n;j++)
		{
			if(a[i]<=a[j]/2)
			{
				q=j+1;
				sum++;
				break;
			}
			if(q==n)
			{
				x=1;
				break;
			}
		}
		if(x==1)
			break;
	}
	cout<<n-sum<<endl;
	return 0;
}


//****************************Bismillahir Rahmanir Rahim***************************??

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;

#define PB push_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'

const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const ll infLL = 9000000000000000000;
#define MOD 1000000007
//#define harmonic(n) 0.57721566490153286l+log(n)

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))

#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, int i) { return n&(1LL<<i); }
inline ll setBit(ll n, int i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, int i) { return n&(~(1LL<<i)); }

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }
inline ll modInverse(ll a) { return modPow(a, MOD-2); }
inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }

/*
bool seive[1010000];
vi prime;

void seiveGen(int limit) {
    limit += 100;
    int sqrtn = sqrt(limit);
    for(int i = 3; i <= sqrtn; i += 2) {
            if(!seive[i>>1]) {
                    for(int j = i * i; j < limit; j += i + i) {
                            seive[j>>1] = 1;
                    }
            }
    }
    prime.PB(2);
    for(int i = 3; i < limit; i += 2) {
            if(!seive[i>>1]) prime.PB(i);
    }
}
*/
/*
*******************************USE of STL***************************
v.erase(unique(v.begin(),v.end()),v.end());
    int a[]={..........};
    sort(a,a+n,greater<int>()); ///sort in descending order
    int z=sizeof(a)/sizeof(a[0]); ///size of array
    string s,x;
    transform(s.begin(),s.end(),s.begin(),::tolower);///change of uppercase to lowercase of any string
    int i;
    i=s.compare(x); ///compare two string like strcmp
    int n,m;
    i=log10(n)+1; ///how many digits in integer n
    i=abs(n-m); ///take absolute value
     copy(v.begin(),v.end(),back_inserter(q)); ///copying v vector to q
     s.find("AB"); ///search index Number of AB(substring) in string s
     remove(a,a+n,3); ///delete 3rd element from array
     ceil(2.3) /// Returns the smallest integer that is greater than or equal to x (i.e : rounds up the nearest integer) দশমিক যদি <=.৫ হয় তাহলে একযোগ করে প্রিন্ট করবে
     round(2.3)///return round value...like 2.3=2,,,2.5=3,,2.6=3;

     {
         ///int to string transfer///
         ostringstream temp; ///need a temp;
         int x;
         temp<<x;
         string s;
         s=temp.str(x); ///transfer
     }
     count(s.begin(), s.end(), 'a')///Count the number of occurrences of 'a' in a string s
*/

//
//debug
#ifdef ahasun
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif
//****************Source Code starting From here**************//

int main()
{
	int n,sum=0;
	cin>>n;
	int a[n+10];
	for(int i=0;i<n;i++)
		cin>>a[i];
	sort(a,a+n);
	int x;
	int q=n/2,p=n/2;
	for(int i=0;i<p;i++)
	{
		for(int j=q;j<n;j++)
		{
			if(a[i]<=a[j]/2)
			{
				q=j+1;
				sum++;
				break;
			}
		}
	}
	cout<<n-sum<<endl;
	return 0;
}


//****************************Bismillahir Rahmanir Rahim***************************??

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;

#define PB push_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'

const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const ll infLL = 9000000000000000000;
#define MOD 1000000007
//#define harmonic(n) 0.57721566490153286l+log(n)

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))

#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, int i) { return n&(1LL<<i); }
inline ll setBit(ll n, int i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, int i) { return n&(~(1LL<<i)); }

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }
inline ll modInverse(ll a) { return modPow(a, MOD-2); }
inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }

/*
bool seive[1010000];
vi prime;

void seiveGen(int limit) {
    limit += 100;
    int sqrtn = sqrt(limit);
    for(int i = 3; i <= sqrtn; i += 2) {
            if(!seive[i>>1]) {
                    for(int j = i * i; j < limit; j += i + i) {
                            seive[j>>1] = 1;
                    }
            }
    }
    prime.PB(2);
    for(int i = 3; i < limit; i += 2) {
            if(!seive[i>>1]) prime.PB(i);
    }
}
*/
/*
*******************************USE of STL***************************
v.erase(unique(v.begin(),v.end()),v.end());
    int a[]={..........};
    sort(a,a+n,greater<int>()); ///sort in descending order
    int z=sizeof(a)/sizeof(a[0]); ///size of array
    string s,x;
    transform(s.begin(),s.end(),s.begin(),::tolower);///change of uppercase to lowercase of any string
    int i;
    i=s.compare(x); ///compare two string like strcmp
    int n,m;
    i=log10(n)+1; ///how many digits in integer n
    i=abs(n-m); ///take absolute value
     copy(v.begin(),v.end(),back_inserter(q)); ///copying v vector to q
     s.find("AB"); ///search index Number of AB(substring) in string s
     remove(a,a+n,3); ///delete 3rd element from array
     ceil(2.3) /// Returns the smallest integer that is greater than or equal to x (i.e : rounds up the nearest integer) দশমিক যদি <=.৫ হয় তাহলে একযোগ করে প্রিন্ট করবে
     round(2.3)///return round value...like 2.3=2,,,2.5=3,,2.6=3;

     {
         ///int to string transfer///
         ostringstream temp; ///need a temp;
         int x;
         temp<<x;
         string s;
         s=temp.str(x); ///transfer
     }
     count(s.begin(), s.end(), 'a')///Count the number of occurrences of 'a' in a string s
*/

//
//debug
#ifdef ahasun
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif
//****************Source Code starting From here**************//

int main()
{
	int n,sum=0;
	cin>>n;
	int a[n+10];
	for(int i=0;i<n;i++)
		cin>>a[i];
	sort(a,a+n);
	int x;
	int q=n/2,p=n/2,z=0;
	for(int i=0;i<p;i++)
	{
		for(int j=q;j<n;j++)
		{
			if(a[i]<=a[j]/2)
			{
				q=j+1;
				sum++;
				break;
			}
			if(q==n)
			{
				z=1;
				break;
			}
		}
		if(z==1)
			break;
	}
	cout<<n-sum<<endl;
	return 0;
}


//****************************Bismillahir Rahmanir Rahim***************************??

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;

#define PB push_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'

const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const ll infLL = 9000000000000000000;
#define MOD 1000000007
//#define harmonic(n) 0.57721566490153286l+log(n)

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))

#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, int i) { return n&(1LL<<i); }
inline ll setBit(ll n, int i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, int i) { return n&(~(1LL<<i)); }

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }
inline ll modInverse(ll a) { return modPow(a, MOD-2); }
inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }

/*
bool seive[1010000];
vi prime;

void seiveGen(int limit) {
    limit += 100;
    int sqrtn = sqrt(limit);
    for(int i = 3; i <= sqrtn; i += 2) {
            if(!seive[i>>1]) {
                    for(int j = i * i; j < limit; j += i + i) {
                            seive[j>>1] = 1;
                    }
            }
    }
    prime.PB(2);
    for(int i = 3; i < limit; i += 2) {
            if(!seive[i>>1]) prime.PB(i);
    }
}
*/
/*
*******************************USE of STL***************************
v.erase(unique(v.begin(),v.end()),v.end());
    int a[]={..........};
    sort(a,a+n,greater<int>()); ///sort in descending order
    int z=sizeof(a)/sizeof(a[0]); ///size of array
    string s,x;
    transform(s.begin(),s.end(),s.begin(),::tolower);///change of uppercase to lowercase of any string
    int i;
    i=s.compare(x); ///compare two string like strcmp
    int n,m;
    i=log10(n)+1; ///how many digits in integer n
    i=abs(n-m); ///take absolute value
     copy(v.begin(),v.end(),back_inserter(q)); ///copying v vector to q
     s.find("AB"); ///search index Number of AB(substring) in string s
     remove(a,a+n,3); ///delete 3rd element from array
     ceil(2.3) /// Returns the smallest integer that is greater than or equal to x (i.e : rounds up the nearest integer) দশমিক যদি <=.৫ হয় তাহলে একযোগ করে প্রিন্ট করবে
     round(2.3)///return round value...like 2.3=2,,,2.5=3,,2.6=3;

     {
         ///int to string transfer///
         ostringstream temp; ///need a temp;
         int x;
         temp<<x;
         string s;
         s=temp.str(x); ///transfer
     }
     count(s.begin(), s.end(), 'a')///Count the number of occurrences of 'a' in a string s
*/

//
//debug
#ifdef ahasun
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif
//****************Source Code starting From here**************//

int main()
{
	int n,sum=0;
	cin>>n;
	int a[n+10];
	for(int i=0;i<n;i++)
		cin>>a[i];
	sort(a,a+n);
	int x;
	int p=n/2;
	for(int i=0;i<p;i++)
	{
		for(int j=p;j<n;j++)
		{
			if(a[i]<=a[j]/2)
			{
				sum++;
				break;
			}
		}
	}
	cout<<n-sum<<endl;
	return 0;
}


//****************************Bismillahir Rahmanir Rahim***************************??

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;

#define PB push_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'

const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const ll infLL = 9000000000000000000;
#define MOD 1000000007
//#define harmonic(n) 0.57721566490153286l+log(n)

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))

#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, int i) { return n&(1LL<<i); }
inline ll setBit(ll n, int i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, int i) { return n&(~(1LL<<i)); }

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }
inline ll modInverse(ll a) { return modPow(a, MOD-2); }
inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }

/*
bool seive[1010000];
vi prime;

void seiveGen(int limit) {
    limit += 100;
    int sqrtn = sqrt(limit);
    for(int i = 3; i <= sqrtn; i += 2) {
            if(!seive[i>>1]) {
                    for(int j = i * i; j < limit; j += i + i) {
                            seive[j>>1] = 1;
                    }
            }
    }
    prime.PB(2);
    for(int i = 3; i < limit; i += 2) {
            if(!seive[i>>1]) prime.PB(i);
    }
}
*/
/*
*******************************USE of STL***************************
v.erase(unique(v.begin(),v.end()),v.end());
    int a[]={..........};
    sort(a,a+n,greater<int>()); ///sort in descending order
    int z=sizeof(a)/sizeof(a[0]); ///size of array
    string s,x;
    transform(s.begin(),s.end(),s.begin(),::tolower);///change of uppercase to lowercase of any string
    int i;
    i=s.compare(x); ///compare two string like strcmp
    int n,m;
    i=log10(n)+1; ///how many digits in integer n
    i=abs(n-m); ///take absolute value
     copy(v.begin(),v.end(),back_inserter(q)); ///copying v vector to q
     s.find("AB"); ///search index Number of AB(substring) in string s
     remove(a,a+n,3); ///delete 3rd element from array
     ceil(2.3) /// Returns the smallest integer that is greater than or equal to x (i.e : rounds up the nearest integer) দশমিক যদি <=.৫ হয় তাহলে একযোগ করে প্রিন্ট করবে
     round(2.3)///return round value...like 2.3=2,,,2.5=3,,2.6=3;

     {
         ///int to string transfer///
         ostringstream temp; ///need a temp;
         int x;
         temp<<x;
         string s;
         s=temp.str(x); ///transfer
     }
     count(s.begin(), s.end(), 'a')///Count the number of occurrences of 'a' in a string s
*/

//
//debug
#ifdef ahasun
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif
//****************Source Code starting From here**************//

int main()
{
	int n,sum=0;
	cin>>n;
	int a[n+10];
	for(int i=0;i<n;i++)
		cin>>a[i];
	sort(a,a+n);
	int x;
	cout<<endl;
	int z=n-1,p=0;
	for(int i=n-1;i>=0;i--)
	{
		for(int j=n/2;j>=0;j--)
		{
			if(a[j]!=-1 && a[j]<=a[i]/2 && a[i]!=-1)
			{
				sum++;
				a[j]=-1;
				z=j;
				a[i]=-2;
				break;
			}
		}
	}
	cout<<n-sum<<endl;
	return 0;
}


//****************************Bismillahir Rahmanir Rahim***************************??

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;

#define PB push_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'

const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const ll infLL = 9000000000000000000;
#define MOD 1000000007
//#define harmonic(n) 0.57721566490153286l+log(n)

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))

#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, int i) { return n&(1LL<<i); }
inline ll setBit(ll n, int i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, int i) { return n&(~(1LL<<i)); }

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }
inline ll modInverse(ll a) { return modPow(a, MOD-2); }
inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }

/*
bool seive[1010000];
vi prime;

void seiveGen(int limit) {
    limit += 100;
    int sqrtn = sqrt(limit);
    for(int i = 3; i <= sqrtn; i += 2) {
            if(!seive[i>>1]) {
                    for(int j = i * i; j < limit; j += i + i) {
                            seive[j>>1] = 1;
                    }
            }
    }
    prime.PB(2);
    for(int i = 3; i < limit; i += 2) {
            if(!seive[i>>1]) prime.PB(i);
    }
}
*/
/*
*******************************USE of STL***************************
v.erase(unique(v.begin(),v.end()),v.end());
    int a[]={..........};
    sort(a,a+n,greater<int>()); ///sort in descending order
    int z=sizeof(a)/sizeof(a[0]); ///size of array
    string s,x;
    transform(s.begin(),s.end(),s.begin(),::tolower);///change of uppercase to lowercase of any string
    int i;
    i=s.compare(x); ///compare two string like strcmp
    int n,m;
    i=log10(n)+1; ///how many digits in integer n
    i=abs(n-m); ///take absolute value
     copy(v.begin(),v.end(),back_inserter(q)); ///copying v vector to q
     s.find("AB"); ///search index Number of AB(substring) in string s
     remove(a,a+n,3); ///delete 3rd element from array
     ceil(2.3) /// Returns the smallest integer that is greater than or equal to x (i.e : rounds up the nearest integer) দশমিক যদি <=.৫ হয় তাহলে একযোগ করে প্রিন্ট করবে
     round(2.3)///return round value...like 2.3=2,,,2.5=3,,2.6=3;

     {
         ///int to string transfer///
         ostringstream temp; ///need a temp;
         int x;
         temp<<x;
         string s;
         s=temp.str(x); ///transfer
     }
     count(s.begin(), s.end(), 'a')///Count the number of occurrences of 'a' in a string s
*/

//
//debug
#ifdef ahasun
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif
//****************Source Code starting From here**************//

int main()
{
	int n,sum=0;
	cin>>n;
	int a[n+10];
	for(int i=0;i<n;i++)
		cin>>a[i];
	sort(a,a+n);
	int x;
	int p=0;
	for(int i=0;i<n/2;i++)
	{
		for(int j=n/2;j<n;j++)
		{
			if(a[i]<=a[j]/2)
			{
				sum++;
				break;
			}
		}
	}
	cout<<n-sum<<endl;
	return 0;
}


//****************************Bismillahir Rahmanir Rahim***************************??

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;

#define PB push_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'

const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const ll infLL = 9000000000000000000;
#define MOD 1000000007
//#define harmonic(n) 0.57721566490153286l+log(n)

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))

#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, int i) { return n&(1LL<<i); }
inline ll setBit(ll n, int i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, int i) { return n&(~(1LL<<i)); }

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }
inline ll modInverse(ll a) { return modPow(a, MOD-2); }
inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }

/*
bool seive[1010000];
vi prime;

void seiveGen(int limit) {
    limit += 100;
    int sqrtn = sqrt(limit);
    for(int i = 3; i <= sqrtn; i += 2) {
            if(!seive[i>>1]) {
                    for(int j = i * i; j < limit; j += i + i) {
                            seive[j>>1] = 1;
                    }
            }
    }
    prime.PB(2);
    for(int i = 3; i < limit; i += 2) {
            if(!seive[i>>1]) prime.PB(i);
    }
}
*/
/*
*******************************USE of STL***************************
v.erase(unique(v.begin(),v.end()),v.end());
    int a[]={..........};
    sort(a,a+n,greater<int>()); ///sort in descending order
    int z=sizeof(a)/sizeof(a[0]); ///size of array
    string s,x;
    transform(s.begin(),s.end(),s.begin(),::tolower);///change of uppercase to lowercase of any string
    int i;
    i=s.compare(x); ///compare two string like strcmp
    int n,m;
    i=log10(n)+1; ///how many digits in integer n
    i=abs(n-m); ///take absolute value
     copy(v.begin(),v.end(),back_inserter(q)); ///copying v vector to q
     s.find("AB"); ///search index Number of AB(substring) in string s
     remove(a,a+n,3); ///delete 3rd element from array
     ceil(2.3) /// Returns the smallest integer that is greater than or equal to x (i.e : rounds up the nearest integer) দশমিক যদি <=.৫ হয় তাহলে একযোগ করে প্রিন্ট করবে
     round(2.3)///return round value...like 2.3=2,,,2.5=3,,2.6=3;

     {
         ///int to string transfer///
         ostringstream temp; ///need a temp;
         int x;
         temp<<x;
         string s;
         s=temp.str(x); ///transfer
     }
     count(s.begin(), s.end(), 'a')///Count the number of occurrences of 'a' in a string s
*/

//
//debug
#ifdef ahasun
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif
//****************Source Code starting From here**************//

int main()
{
	int n,sum=0;
	cin>>n;
	int a[n+10];
	for(int i=0;i<n;i++)
		cin>>a[i];
	sort(a,a+n);
	int x;
	int q=n/2,p=n/2;
	for(int i=0;i<p;i++)
	{
		for(int j=q;j<n;j++)
		{
			if(a[i]<=a[j]/2)
			{
				q++;
				sum++;
				break;
			}
		}
	}
	cout<<n-sum<<endl;
	return 0;
}


/*
Author- Aasav Badera
Time- Sun May  3 06:10:39 2020
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
struct custom_hash {
    static uint64_t splitmix64(uint64_t x) {
        // http://xorshift.di.unimi.it/splitmix64.c
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }

    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};
void err(istream_iterator<string> it) {}
template<typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
    cerr << *it << " = " << a << endl;
    err(++it, args...);
}
#define ll                 long long
#define vi                 vector<ll >
// -------------------Standard Traversal Moves---------------------
// vi fx = {1 ,-1 ,0, 0}, fy = {0, 0, -1, 1};
// vi fx = {2, -2, 2, -2,  1, -1, 1, -1}, fy = {1, 1, -1, -1, 2, 2, -2, -2};
// vi fx = {1, 1, 1, -1, -1 , -1, 0, 0}, fy = {1, -1, 0, 1, -1, 0, 1, -1};
// ----------------------------------------------------------------

#define int                long long
#define pb                 push_back
#define mii                map<ll ,ll >
#define rep(i, a, b)       for(ll  i=a;i<b;i++)
#ifdef LOCAL
#define dbg(args...)       { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
#else
#define dbg(args...)
#endif
#define pii                pair<ll ,ll >
#define ppb                pop_back
#define vii                vector<pair<ll , ll >>
#define si                 set <ll>
#define hell               1000000007
// #define hell               (ll)998244353
#define all(a)             (a).begin(),(a).end()
#define sz(x)              (ll )x.size()
#define mp                 make_pair
#define yes                cout << "YES" << endl
#define no                 cout << "NO" << endl
#define inf                9223372036854775807
#define endl               '\n'
#define N                  500005
ll n, m, k, a[N];

int32_t main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    #ifdef LOCAL
    // for getting input from input.txt
    freopen("input.txt", "r", stdin);
    // for writing output to output.txt
    freopen("output.txt", "w", stdout);
    #endif
    ll tests = 1;
    // cin >> tests;
    rep(test, 1, tests+1)
    {
        cin >> n;
        rep( i,0, n)
            cin >> a[i];
        sort(a, a + n);
        int ans = 0;
        ll ptr1 = n - 1, ptr2 = (n-1)/2;
        while(ptr1 > (n-1)/2 and ptr2 > -1)
        {
            if(a[ptr1] >= 2*a[ptr2])
            {
                ans++;
                ptr1--;
                ptr2--;
            }
            else{
                ans++;
                ptr2--;
            }
        }
        while(ptr2 > -1)
        {
            ans++;
            ptr2--;
        }
        while(ptr1 > (n - 1) / 2)
        {
            ans++;
            ptr1--;
        }
        cout << ans << endl;
    }
    return 0;
}


/*
Author- Aasav Badera
Time- Sun May  3 06:10:39 2020
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
struct custom_hash {
    static uint64_t splitmix64(uint64_t x) {
        // http://xorshift.di.unimi.it/splitmix64.c
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }

    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};
void err(istream_iterator<string> it) {}
template<typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
    cerr << *it << " = " << a << endl;
    err(++it, args...);
}
#define ll                 long long
#define vi                 vector<ll >
// -------------------Standard Traversal Moves---------------------
// vi fx = {1 ,-1 ,0, 0}, fy = {0, 0, -1, 1};
// vi fx = {2, -2, 2, -2,  1, -1, 1, -1}, fy = {1, 1, -1, -1, 2, 2, -2, -2};
// vi fx = {1, 1, 1, -1, -1 , -1, 0, 0}, fy = {1, -1, 0, 1, -1, 0, 1, -1};
// ----------------------------------------------------------------

#define int                long long
#define pb                 push_back
#define mii                map<ll ,ll >
#define rep(i, a, b)       for(ll  i=a;i<b;i++)
#ifdef LOCAL
#define dbg(args...)       { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
#else
#define dbg(args...)
#endif
#define pii                pair<ll ,ll >
#define ppb                pop_back
#define vii                vector<pair<ll , ll >>
#define si                 set <ll>
#define hell               1000000007
// #define hell               (ll)998244353
#define all(a)             (a).begin(),(a).end()
#define sz(x)              (ll )x.size()
#define mp                 make_pair
#define yes                cout << "YES" << endl
#define no                 cout << "NO" << endl
#define inf                9223372036854775807
#define endl               '\n'
#define N                  200005
ll n, m, k, a[N];

int32_t main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    #ifdef LOCAL
    // for getting input from input.txt
    freopen("input.txt", "r", stdin);
    // for writing output to output.txt
    freopen("output.txt", "w", stdout);
    #endif
    ll tests = 1;
    // cin >> tests;
    rep(test, 1, tests+1)
    {
        cin >> n;
        rep( i,0, n)
            cin >> a[i];
        sort(a, a + n);
        int ans = 0;
        ll ptr1 = n - 1, ptr2 = (n-2)/2;
        while(ptr1 > (n-2)/2 and ptr2 > -1)
        {
            if(a[ptr1] >= 2*a[ptr2])
            {
                ans++;
                ptr1--;
                ptr2--;
            }
            else{
                ans++;
                ptr2--;
            }
        }
        while(ptr2 > -1)
        {
            ans++;
            ptr2--;
        }
        while(ptr1 > (n - 1) / 2)
        {
            ans++;
            ptr1--;
        }
        cout << ans << endl;
    }
    return 0;
}


/*
Author- Aasav Badera
Time- Sun May  3 06:10:39 2020
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
struct custom_hash {
    static uint64_t splitmix64(uint64_t x) {
        // http://xorshift.di.unimi.it/splitmix64.c
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }

    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};
void err(istream_iterator<string> it) {}
template<typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
    cerr << *it << " = " << a << endl;
    err(++it, args...);
}
#define ll                 long long
#define vi                 vector<ll >
// -------------------Standard Traversal Moves---------------------
// vi fx = {1 ,-1 ,0, 0}, fy = {0, 0, -1, 1};
// vi fx = {2, -2, 2, -2,  1, -1, 1, -1}, fy = {1, 1, -1, -1, 2, 2, -2, -2};
// vi fx = {1, 1, 1, -1, -1 , -1, 0, 0}, fy = {1, -1, 0, 1, -1, 0, 1, -1};
// ----------------------------------------------------------------

#define int                long long
#define pb                 push_back
#define mii                map<ll ,ll >
#define rep(i, a, b)       for(ll  i=a;i<b;i++)
#ifdef LOCAL
#define dbg(args...)       { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
#else
#define dbg(args...)
#endif
#define pii                pair<ll ,ll >
#define ppb                pop_back
#define vii                vector<pair<ll , ll >>
#define si                 set <ll>
#define hell               1000000007
// #define hell               (ll)998244353
#define all(a)             (a).begin(),(a).end()
#define sz(x)              (ll )x.size()
#define mp                 make_pair
#define yes                cout << "YES" << endl
#define no                 cout << "NO" << endl
#define inf                9223372036854775807
#define endl               '\n'
#define N                  200005
ll n, m, k, a[N];

int32_t main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    #ifdef LOCAL
    // for getting input from input.txt
    freopen("input.txt", "r", stdin);
    // for writing output to output.txt
    freopen("output.txt", "w", stdout);
    #endif
    ll tests = 1;
    // cin >> tests;
    rep(test, 1, tests+1)
    {
        cin >> n;
        rep( i,0, n)
            cin >> a[i];
        sort(a, a + n);
        int ans = 0;
        ll ptr1 = n - 1, ptr2 = (n-1)/2;
        while(ptr1 > (n-1)/2 and ptr2 > -1)
        {
            if(a[ptr1] >= 2*a[ptr2])
            {
                ans++;
                ptr1--;
                ptr2--;
            }
            else{
                ptr2--;
            }
        }
        cout << n - ans << endl;
    }
    return 0;
}