题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1029
题目大意是说给出a数组,对于b中的每一个在a中找出最小范围使得ai<=b<a(i+1),注意Print a blank line after each test case.这一句话!开始没看到结果WA了,杯具
自敲的二分
int n,m;
int find(int *a,int x)
{
int l=0,r=n-1,mid;
if(x<a[0] || a[n-1]<=x)return -1;
while(l<=r)
{
mid=(l+r)/2;
if(a[mid]<=x && a[mid+1]>x)return mid;
if(a[mid]<=x)
l=mid;
else
r=mid;
}
return l;//这里不需要再return了,因为上面肯定可以找到这个区间
}
int main()
{
int a[10001];
freopen("a.txt","r",stdin);
while(cin>>n>>m)
{
int i,j;
for(i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(i=0;i<m;i++)
{
int b;
cin>>b;
j=find(a,b);
if(j>=0)
cout<<"["<<a[j]<<","<<a[j+1]<<")"<<endl;
else
cout<<"no such interval/n";
}
cout<<"/n";
}
return 0;
}
stl---lower_bound()
int n,m;
int find(int *a,int x)
{
if(x<a[0] || a[n-1]<=x)return -1;
return lower_bound(a,a+n,x)-a;
}
int main()
{
int a[10001];
while(cin>>n>>m)
{
int i,j;
for(i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(i=0;i<m;i++)
{
int b;
cin>>b;
j=find(a,b);
if(a[j]!=b)j=j-1;
if(j>=0)
cout<<"["<<a[j]<<","<<a[j+1]<<")"<<endl;
else
cout<<"no such interval/n";
}
cout<<"/n";
}
return 0;
}