vijos P1165 火烧赤壁

vijos P1165 火烧赤壁

一个区间问题。

以下是我的代码:

#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;
}

你可能感兴趣的:(vijos P1165 火烧赤壁)