原来二分还可以这么查找:
//A
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAXN 50010
int Point[MAXN*2];
int main()
{
int i;
int n,q;
int kase,casenum;
int l,r;
int ans;
scanf("%d",&casenum);
kase=0;
while(casenum--)
{
scanf("%d%d",&n,&q);
memset(Point,0,sizeof(Point));
for(i=1;i<=n;i++)
scanf("%d",&Point[i]);
printf("Case %d:\n",++kase);
while(q--)
{
scanf("%d%d",&l,&r);
ans=upper_bound(Point+1,Point+1+n,r)-lower_bound(Point+1,Point+1+n,l);
printf("%d\n",ans);
}
}
return 0;
}
注意upper_bound和lower_bound的边界的处理