您的位置:首页 > 其它

模板——二分查找

2017-08-23 19:36 197 查看
今天十分咸鱼的去洛谷刷了一道二分查找的题。本来自信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;
}


/////////////////////
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二分查找