标签:io os sp for bs amp nbsp 程序 ios
#include<stdio.h>}
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[10000];
int Serch(int x,int y,int v)//二分查找上界当找不到的时候返回的是第一个大于v的值,因为当出现a[x]小于v的时候,a[y]大于v的时候,mid=y=(y+x+1)/2,程序会执行else,所以返回的时候就是y的值,注意越界;
{
int mid,k=0;
while(x<y)
{
mid=(x+y+1)/2;//注意这个求中间值
if(a[mid]>v)
y=mid-1;
else
x=mid;
}
return x;
}
int main()
{
int n,i,m,b;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
puts("");
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&b);
int x=Serch(0,n,b);
printf("%d %d\n",x,a[x]);
}
}
return 0;
}
调用STL
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int v[10000];
int main()
{
int n,m,a,b,i;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&v[i]);
sort(v,v+n);
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
cout<<upper_bound(v,v+n,b)<< endl;//返回的是上界地址
cout <<lower_bound(v,v+n,a)<< endl;//返回的是下界地址
}
}
return 0;
}
标签:io os sp for bs amp nbsp 程序 ios
原文地址:http://blog.csdn.net/u013491149/article/details/41701463