TSA 范围查询(Range) 超时

代码如下,实在想不出来怎么办了, 求大神支援
#include
#include
using namespace std;

int compare(const void *a, const void *b)
{
int *pa = (int *)a;
int *pb = (int *)b;
return (*pa)-(*pb);
}
int bin_search(int point_array[], int low, int high, int ans)
{
int mid, left = low, right = high;
while(left <= right)
{
mid = left +((right - left) >> 1);
if(point_array[mid] >= ans) right = mid - 1;
else left = mid + 1;
}
return left;

}
int main()
{
int num_point, num_search;
cin>>num_point>>num_search;
int *point_array = new int [num_point];

for(int i = 0; i < num_point ; i++)
{
    cin >> point_array[i];
}
qsort(point_array, num_point, sizeof(int), compare);

int left_bind,right_bind;
for(int i = 0; i < num_search ; i++)
{
    cin >> left_bind >> right_bind;
    if(left_bind >right_bind)
    {
        int temp = left_bind;
        left_bind = right_bind;
        right_bind = temp;
    }
    int find_left = bin_search(point_array, 0, num_point-1, left_bind);
    int find_right = bin_search(point_array, 0, num_point-1, right_bind);

    int ans = find_right - find_left;
    if(point_array[find_right] == right_bind) ans++;
    if(ans <0) ans = 0;
    cout << ans <<endl;

}
return 0;

}