//题意:n个数,x可以与y配对后消失(y>=2x),求最小的剩余个数
判定是否能消失x个.
贪心:消失的x个肯定是前x小的,因为若前x的消失不了,则不可能消失x个
反证 若(ai,yk) i>x能匹配x对 则把ai换成aj j<x也一定成立,则矛盾
#include <bits/stdc++.h>
using namespace std;
const int N=5e5+20;
int n,a[N];
bool check(int x)
{
//判定是否能消失x个.
int k=x+1,i=1;
while(k<=n)
{
if(a[k]>=a[i]*2)
{
i++;
}
k++;
if(i>x)
return true;
}
return false;
}
int main()
{
while(cin>>n)
{
int ans=0;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int l=0,r=n/2;//最多消失n/2个
sort(a+1,a+1+n);
while(l<=r)
{
int mid=(l+r)/2;
if(check(mid))
{
ans=mid;
l=mid+1;
}
else
r=mid-1;
}
cout<<n-ans<<endl;
}
return 0;
}