ZJU2029 The Intervals - 二分查找
2008-02-12 21:46
162 查看
题目描述:
给定一个长度为n的数字序列a[i],接下来输入m个数b[i],对于每个数字,在a[]中找出两个数字x,y,使得b[i]在区间[ x , y )内,要求这个区间长度尽量小。
分析:
其实题目就是要求在排序后的序列a[]中,找到某个位置k使得 a[k]<=b<a[k+1]。然后输出a[k]和a[k+1]即可。
很明显可以使用二分查找法。
似乎数据很弱…… 用qsort和n^2排序都是0.00秒。但是只有200多的AC人数,实在难以理解……
#include <stdio.h>
#include <stdlib.h>
#define N 1001
int a
,b;
int cmp(const void *x,const void *y){
return *(int*)x - *(int*)y;
}
int Bsearch(int a[],int n,int b){
int l,r,m;
if(a[n-1]<=b || a[0]>b) return -1;
l=0;r=n-1;
while(l<r-1){
m=(l+r)/2;
if(a[m]<=b) l=m;
else r=m;
}
return l;
}
int main()
{
int i,j,k,m,n;
while(scanf("%d%d",&n,&m)!=EOF){
for(i=0;i<n;i++) scanf("%d",&a[i]);
qsort(a,n,sizeof(int),cmp);
for(i=0;i<m;i++){
scanf("%d",&b);
k=Bsearch(a,n,b);
if(k<0) puts("no such interval");
else printf("[%d,%d)/n",a[k],a[k+1]);
}
puts("");
}
return 0;
}
给定一个长度为n的数字序列a[i],接下来输入m个数b[i],对于每个数字,在a[]中找出两个数字x,y,使得b[i]在区间[ x , y )内,要求这个区间长度尽量小。
分析:
其实题目就是要求在排序后的序列a[]中,找到某个位置k使得 a[k]<=b<a[k+1]。然后输出a[k]和a[k+1]即可。
很明显可以使用二分查找法。
似乎数据很弱…… 用qsort和n^2排序都是0.00秒。但是只有200多的AC人数,实在难以理解……
#include <stdio.h>
#include <stdlib.h>
#define N 1001
int a
,b;
int cmp(const void *x,const void *y){
return *(int*)x - *(int*)y;
}
int Bsearch(int a[],int n,int b){
int l,r,m;
if(a[n-1]<=b || a[0]>b) return -1;
l=0;r=n-1;
while(l<r-1){
m=(l+r)/2;
if(a[m]<=b) l=m;
else r=m;
}
return l;
}
int main()
{
int i,j,k,m,n;
while(scanf("%d%d",&n,&m)!=EOF){
for(i=0;i<n;i++) scanf("%d",&a[i]);
qsort(a,n,sizeof(int),cmp);
for(i=0;i<m;i++){
scanf("%d",&b);
k=Bsearch(a,n,b);
if(k<0) puts("no such interval");
else printf("[%d,%d)/n",a[k],a[k+1]);
}
puts("");
}
return 0;
}
相关文章推荐
- 二分查找算法
- STL之二分查找(binary_search(),lower_bound(),upper_bound() )
- Java实现折半查找(二分查找)的递归和非递归算法
- hdu 2199 Can you solve this equation? 简单二分查找
- [bzoj3343]&&[洛谷2810] [分块][块内排序][二分查找]教主的魔法
- POJ1003 二分_查找/自定义zero()函数
- JDK Aarrays 类中的二分查找方法
- poj--2549--Sumsets(二分查找)
- 二分查找
- java:二分查找
- C++ Binary Search Sort 二分查找排序算法
- 【POJ】2002 - Squares(暴力枚举 & 双关键字二分查找)
- 二分查找
- 二分查找
- 二分查找的三种实现
- UVA10474 Where is the Marble?(二分查找,STL-lower_bound)
- 数据结构实验之查找四:二分查找
- 二分查找
- poj 3273 Monthly Expense(二分查找)
- 二分查找