#include <stdio.h>
#define N 6
int sort(int x[], int y[], int b, int e)
{
int tmpx,tmpy,i,j,m;
i=b;
j=e;
tmpx=x[i];
tmpy=y[i];
while(i<j)
{
while(x[j]>=tmpx&&i<j) j--;
x[i]=x[j];
y[i]=y[j];
while(x[i]<=tmpx&&i<j) i++;
x[j]=x[i];
y[j]=y[i];
}
x[i]=tmpx;
y[i]=tmpy;
return i;
}
void quicksort(int x[], int y[], int b, int e)
{
int i,j,m;
i=b;j=e;
if(i<j)
{
m=sort(x,y,i,j);
quicksort(x,y,i,m-1);
quicksort(x,y,m+1,j);
}
}
int merge(int x[], int y[],int n)
{
int cur=0,next=1;
while(next<n)
{
if(y[cur]>=x[next])
{
if(y[cur]<=y[next])
y[cur]=y[next];
next++;
}
else
{
x[cur+1]=x[next];
y[cur+1]=y[next];
next++;
cur++;
}
}
++cur;
x[cur]='\0';
y[cur]='\0';
return cur;
}
int find(int x[], int y[],int n, int X,int Y)
{
int low=0,high=n-1,m;
while(low<=high)
{
m=(high+low)/2;
if(X<x[m])
{
high=m-1;
}
else if(X>=x[m])
{
if(Y<=y[m]) return m;
else low=m+1;
}
}
return -1;
}
void pri(int x[],int y[],int len)
{
int i;
for (i = 0; i < len; i++)
{
if(i == 5)
{
printf("\n");
}
printf("[%d,%d] ", x[i], y[i]);
}
printf("\n");
}
int main()
{
int x[N] = {99,7,2,143,1,8};
int y[N] = {200,20,3,188,3,15};
int len;
int flag;
printf("The Object Regions Are:\n");
pri(x,y,N);
quicksort(x,y,0,5);
printf("After sort array Are:\n");
pri(x,y,N);
len=merge(x,y,N);
printf("After merge len is:%d\n",len);
pri(x,y,len);
flag=find(x,y,len,100,150);
printf("flag is:%d\n",flag);
}