这提做的郁闷,开始马虎大意,wrong了n次,最后来了一个tle
郁闷的是,将我自己写的快排换成qsort后,竟然AC了
#include <stdio.h>
#include<stdlib.h>
struct s
{
int a;
int b;
}qj[100000];
int cmp(const void *a,const void *b)
{
return (*(struct s *)a).a-(*(struct s *)b).a;
}
int main(int argc, char** argv) {
int n,i,x,y,k;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d",&qj[i].a,&qj[i].b);
}
qsort(qj,n,sizeof(struct s),cmp);
i=0;
x=qj[0].a;
y=qj[0].b;
while(i<n)
{
if(x==qj[i].a)
{
if(y<qj[i].b)
y=qj[i].b;
}
else if(y>=qj[i].a)
{
if(qj[i].b>y)
y=qj[i].b;
}
else
{
printf("%d %d\n",x,y);
x=qj[i].a;
y=qj[i].b;
}
i++;
}
printf("%d %d\n",x,y);
return 0;
}
以下是自己写的tle的快排,排序还是能排的,但不知为什么这么慢,今天休息下,有时间在慢慢研究
int one(struct s a[],int s,int e)
{
struct s t,x=a[e];
int i=s-1;
int j;
for(j=s;j<e;j++)
{
if(a[j].a<=x.a)
{
i++;
t=a[j];
a[j]=a[i];
a[i]=t;
}
}
t=a[i+1];
a[i+1]=a[e];
a[e]=t;
return i+1;
}
void qsort(struct s a[],int s,int e)
{
int q;
if(s<e)
{
q=one(a,s,e);
qsort(a,q+1,e);
qsort(a,s,q-1);
}
}