删除元素
时间限制:
1000 ms | 内存限制:
65535 KB
-
描述
-
题意很简单,给一个长度为n的序列,问至少删除序列中多少个数,使得删除后的序列中的最大值<= 2*最小值
-
输入
-
多组测试数据,每组测试数据包含两行。
第一行一个整数n( n <= 10^5),序列中元素的个数。
第二行依次输入n个数a1,a2……an,(1 <= ai <= 10^9)以空格分开。
输出
- 输出占一行,至少要删除数的个数。 样例输入
-
6 5 4 3 3 8 6
样例输出
-
1
-
多组测试数据,每组测试数据包含两行。
code:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[100005];
int main()
{
int n,i,k;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
int ans=0;//记录大小在[a[i],2*a[i]]范围内数值最多的个数
for(i=k=0;i<n;i++)
{
while(k<n&&a[k]<=2*a[i])
{
k++;
}
if(k-i>ans)ans=k-i;
//1 5 6 7 8 9 100
}
printf("%d\n",n-ans);
}
return 0;
}