模板——二分查找

来源:互联网 发布:淘宝2014年全年交易额 编辑:程序博客网 时间:2024/05/22 06:28

今天十分咸鱼的去洛谷刷了一道二分查找的题。本来自信AC结果崩了…发现还是有一些细节的,来记录一下。
保龄球——luogu
直接发代码好了,注意的地方用注释标记。

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int n,q;int b;struct pan{    int a;    int td;}run[110000];int cmp(pan y,pan z){    return y.a<z.a;}int love(int x){    int mid;    int tot=n,fir=1;    while(tot>=fir)//**一定要带等于号!!小黄书上骗人!!QAQ**    {        mid=fir+(tot-fir)/2;//(tot-fir)/2+fir比(fir+tot)/2的优点在于防止加起来的极限数据过大        if(run[mid].a==x)        {            return run[mid].td;        }         else        {            if(x<run[mid].a) tot=mid-1;//**要在mid的基础上-1,不减的话会神奇的TLE掉...**            else             {                if(x>run[mid].a) fir=mid+1; //同上                }                               }    }    return 0;}int main(){    cin>>n;    for(int i=1;i<=n;i++)    {        cin>>run[i].a;        run[i].td=i;     }    sort(run+1,run+n+1,cmp);        cin>>q;    for(int i=1;i<=q;i++)    {        cin>>b;        cout<<love(b)<<endl;        }    return 0;   }

/////////////////////

原创粉丝点击