1335: 高桥和低桥(用到二分查找)

来源:互联网 发布:砸金蛋源码 编辑:程序博客网 时间:2024/05/30 23:03

题目链接:点击打开链接

题目大意就不说了(中文题)

主要用二分(太坑了)

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[100009],b[100009];int n,m,k,h,t,x,y,shui;int erfen1(int s,int e)//二分查找求最小值{    if(e-s==1||e==s)    {        if(a[s]>shui&&a[s]<=x)            return s;        else return e;    }    int mid=(s+e)/2;    if((a[mid]>shui&&a[mid]<=x)||a[mid]>x)        erfen1(s,mid);    else erfen1(mid,e);}int erfen2(int s,int e)//二分查找求最大值{    if(e-s==1||e==s)    {        if(a[e]>shui&&a[e]<=x)            return e;        else return s;    }    int mid=(s+e)/2;    if((a[mid]>shui&&a[mid]<=x)||a[mid]<=shui)        erfen2(mid,e);    else erfen2(s,mid);}int main(){    int i;    t=1;    while(scanf("%d%d%d",&n,&m,&k)!=EOF)    {        memset(b,0,sizeof(b));        memset(a,0,sizeof(a));        for(i=0; i<n; i++)            scanf("%d",&a[i]);        sort(a,a+n);        shui=1;        int sum=0;        for(i=0; i<m; i++)        {            scanf("%d%d",&x,&y);            int s=erfen1(0,n-1);            int e=erfen2(0,n-1);            for(int j=s; j<=e; j++)                b[j]++;            shui=y;        }        for(i=0; i<n; i++)            if(b[i]>=k)                sum++;        printf("Case %d: %d\n",t++,sum);    }    return 0;}


0 0
原创粉丝点击