Cod sursa(job #268357)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 1 martie 2009 09:51:27
Problema 12-Perm Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<iostream.h>
#include<stdio.h>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a>b?b:a)
FILE *f=fopen("linterv.in","r"),*g=fopen("linterv.out","w");
struct inter{int x,y;};
inter a[5005],aux;
int maxx,minn,i,j,n,t1,t;
long lung;
void qsort(int st,int dr)
{
     int i=st,j=dr,mij=a[(st+dr)/2].x;
     do
     {
     while(i<=j&&a[i].x<mij) i++;
     while(i<=j&&a[j].x>mij) j--;
     if(i<=j)
     {
         aux=a[i];a[i]=a[j];a[j]=aux;
         i++;j--;
     }
    }while(i<=j);
    if(i<dr) qsort(i,dr);
    if(st<j) qsort(st,j);
}
int main()
{
    fscanf(f,"%d",&t);
    for(;t;t--)
    {
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++)
	  fscanf(f,"%d%d",&a[i].x,&a[i].y);
    qsort(1,n);
    lung=0;i=0;maxx=a[1].y;
    while(i<n)
    {
	i++;t1=0;
	minn=a[i].x;maxx=a[i].y;
	while(a[i].x<=maxx&&a[i].x!=a[i].y)
	{
	  maxx=max(maxx,a[i].y);
	  minn=min(minn,a[i].x);
	  t1=1;i++;
	}
	if(t1) i--;
	lung+=maxx-minn;
    }
    fprintf(g,"%ld\n",lung);
    }
    return 0;
}