一题简单的数据结构,求助

描述:数轴上有n个点,对于任一闭区间[a,b],试计算落在其内的点数。输入:第一行包括两个整数:点的总数n,查询的次数m。第二行包含n个数,为各个点的坐标。以下m行,各包... 描述:

数轴上有n个点,对于任一闭区间 [a, b],试计算落在其内的点数。

输入:

第一行包括两个整数:点的总数n,查询的次数m。

第二行包含n个数,为各个点的坐标。

以下m行,各包含两个整数:查询区间的左、右边界a和b。

输出:

对每次查询,输出落在闭区间[a, b]内点的个数。

输入样例:

5 2
1 3 7 9 11
4 6
7 12

输出样例:

0
3

限制:

0 ≤ n, m ≤ 5×10^5

对于次查询的区间[a, b],都有a ≤ b

各点的坐标互异

各点的坐标、查询区间的边界a、b,均为不超过10^7的非负整数

时间:2s,内存:256MB

以下我的代码,【OJ上的20个测试点过了17个,另外3个显示答案错误】
但是我找不出为什么。
#include <cstdio>
#include <cstdlib>
#define num 500001
int search(int lo, int hi, int x, int a[]);
void sort(int a[], int lo, int hi);
int main()
{
int query,count[num+1]={},pointnum,point[num+1],region[num+1][2];//分别是查询次数,计数器,点的个数,储存点坐标的数组,储存区间坐标的数组
int i;
scanf("%d%d",&pointnum,&query);
//接受数组
for(i=0;i<pointnum;i++)
scanf("%d",&point[i]);
//接受查询区间
for(i=0;i<query;i++)
scanf("%d%d",®ion[i][0],®ion[i][1]);
//快排
sort(point,0,pointnum-1);
//计数
for(i=0;i<query;i++)
{
if(region[i][0]>point[pointnum-1]||region[i][1]<point[0])
count[i]=0;
else
{
int a=search(0,pointnum,region[i][0],point);
int b=search(a,pointnum,region[i][1],point);
count[i]=b-a;
if(point[a]==region[i][0])//如果左边界恰好在数组中,计数器加一
count[i]++;
}
}
//输出
for(i=0;i<query;i++)
printf("%d\n",count[i]);
system("pause");
return 0;
}
//二分查找
int search(int lo, int hi, int x, int a[])
{
while(lo<hi)
{
int mi=lo+((hi-lo)>>1);
(x<a[mi])?hi=mi:lo=mi+1;
}
lo=lo-1;
return (lo);//返回不大于X的元素的最大者的下标
}
//快排
void sort(int a[],int lo, int hi)
{
if (lo<hi)
{
int i=lo,j=hi, x=a[lo];
while (i<j)
{
while(i<j&&a[j]>=x)
j--;
if(i<j)
a[i++] = a[j];
while(i<j && a[i]< x)
i++;
if(i < j)
a[j--] = a[i];
}
a[i] = x;
sort(a,lo,i-1);
sort(a,i+1,hi);
}
}
想问问我到底遗漏了什么情况?毕竟17组都通过了……
展开
 我来答
wyujack
2015-04-04 · TA获得超过223个赞
知道小有建树答主
回答量:303
采纳率:0%
帮助的人:179万
展开全部
(1)右边界是否有可能在数组中
if(point[a]==region[i][0])//如果左边界恰好在数组中,计数器加一
count[i]++;  
(2)二分查找
(x<a[mi])?hi=mi:lo=mi+1;
=》(x<a[mi])?hi=mi-1:lo=mi+1;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式