题意:给出一堆二维数组,然后输出被覆盖的位置。
算法:先对给出的数据进行x的从小到大的情况下再对y的从小到大。
代码:
#include <iostream>
using namespace std;
#include <stdlib.h>
typedef struct
{
int x;
int y;
}weizhi;
weizhi data[50001];
int cmp(const void *a,const void *b)
{
weizhi *p1=(weizhi *)a;
weizhi *p2=(weizhi *)b;
if(p1->x==p2->x)
return p1->y - p2->y;
return p1->x - p2->x;
}
int main()
{
int n,i,first,last,j;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d%d",&data[i].x,&data[i].y);
qsort(data,n,sizeof(weizhi),cmp);
first=data[0].x;
last=data[0].y;
for(i=0;i<n;i++)//对输入的数据进行操作 下面的三种情况讨论
{
if(last>=data[i].x && last<data[i].y)
{
last=data[i].y;
continue;
}
if(last>data[i].x && last>data[i].y)
continue;
if(last<data[i].x)
{
printf("%d %d/n",first,last);
first=data[i].x;
last=data[i].y;
}
}
printf("%d %d/n",first,last);
return 0;
}
AC TIME 110MS