二分——CF154,Div.2

来源:互联网 发布:virtualbox ubuntu 卡 编辑:程序博客网 时间:2024/05/22 13:31
//http://www.codeforces.com/contest/253/problem/B//二分#include <algorithm>#include <iostream>#include <cstdio>using namespace std;int a[155660],n;int lower_bound2(int v){    int x=1;    int y=n;    int m;//    cout<<"v is   "<<v<<endl;    while(x<y){        m=(x+y)/2;        if(a[m]>=v) y=m;        else x=m+1;    }//    cout << "fasdf"<<"                "<<x<<endl;    return x;}int main(){    freopen("input.txt","r",stdin);    freopen("output.txt","w",stdout);    int ans;    while (cin>>n){        for(int j =1;j<n+1;j++)            cin>>a[j];        sort(a+1,a+n+1);        a[0]=-9119999;        a[n+1]=99999999;        ans=9999999;        for (int j=n;j>0;j--)            if(a[j]&1)                ans=min(ans,n-j-1+lower_bound2(a[j]/2+1));            else                ans=min(ans, n-j-1+lower_bound2(a[j]/2));       cout<<ans<<endl<<endl;    }    return 0;}





解法二



//http://www.codeforces.com/contest/253/problem/B//二分#include <algorithm>#include <iostream>#include <cstdio>using namespace std;int a[155660],n;int upper_bound2(int v){    int x=0;    int y=n;    int m;    while(x<y){        m=(x+y)/2;        if(a[m]<=v)  x=m+1;        else    y=m;    }//    cout<<x<<endl;    return x;}int main(){    freopen("input.txt","r",stdin);    freopen("output.txt","w",stdout);    int ans;    while (cin>>n){        for(int j =0;j<n;j++)            cin>>a[j];        sort(a,a+n);        a[n]=-99999999;        ans=9999999;        for (int j=0;j<n;j++)            ans=min(ans,n+j-upper_bound2(2*a[j]));       cout<<ans<<endl;    }    return 0;}


原创粉丝点击