删除元素

来源:互联网 发布:淘宝卖家平板客户端 编辑:程序博客网 时间:2024/04/29 19:10
描述

题意很简单,给一个长度为n的序列,问至少删除序列中多少个数,使得删除后的序列中的最大值<= 2*最小值

输入
多组测试数据,每组测试数据包含两行。
第一行一个整数n( n <= 10^5),序列中元素的个数。
第二行依次输入n个数a1,a2……an,(1 <= ai <= 10^9)以空格分开。
输出
输出占一行,至少要删除数的个数。
样例输入
65 4 3 3 8 6
样例输出
1
/*
   解题报告:
    用二分把所有元素都遍历一次,找出一个最小的;
*/
标程:
#include<stdio.h>#include<algorithm>using namespace std;int p[100055];int main(){    //freopen("a.txt","r",stdin);    int n,i;    while(scanf("%d",&n)!=EOF)    {        for(i=0;i<n;i++)  scanf("%d",p+i);        sort(p,p+n);        int k=1<<30;        for(i=0;i<n;i++)        {            int cnt=i;            int l=i,r=n,mid;            while(l<r)            {                mid=(r+l)/2;                if(p[i]*2<p[mid]) r=mid;                else l=mid+1;            }            cnt+=(n-r);            k=cnt<k?cnt:k;        }        printf("%d\n",k);    }    return 0;}
原创粉丝点击