一个区间问题。
以下是我的代码:
#include<stdio.h>
typedef struct{
long begin,end;
}length;
void qsort(length a[],long ii,long jj)
{/**//*快速排序,按 begin 升序排列*/
long i=ii,j=jj,mid=a[(ii+jj)/2].begin;
length t;
do{
while(a[i].begin<mid) i++;
while(a[j].begin>mid) j--;
if(i<=j)
{
t=a[i];a[i]=a[j];a[j]=t;
i++; j--;
}
}while(i<=j);
if(i<jj) qsort(a,i,jj);
if(j>ii) qsort(a,ii,j);
}
int main()
{
length l[20000];
long k,i,t,ans;
scanf("%ld",&k);
for(i=0;i<k;i++)
{
scanf("%ld%ld",&l[i].begin,&l[i].end);
if(l[i].begin>l[i].end)
{ t=l[i].begin;l[i].begin=l[i].end;l[i].end=t; }
}
qsort(l,0,k-1);
for(i=0;i<k-1;i++)
{/**//*处理重叠区间*/
if( l[i].end>=l[i+1].begin && l[i+1].end>=l[i].end)
l[i].end=l[i+1].begin;
else if( l[i].begin<=l[i+1].begin && l[i].end>=l[i+1].end )
{
t=l[i].end;
l[i].end=l[i+1].begin;
l[i+1].end=t;
}
}
ans=0;
for(i=0;i<k;i++)
ans += l[i].end-l[i].begin;
printf("%ld\n",ans);
return 0;
}
posted on 2010-01-06 19:16
lee1r 阅读(237)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:数据结构