Pagini recente » Cod sursa (job #1585238) | Cod sursa (job #699580) | Cod sursa (job #2240400) | Cod sursa (job #9218) | Cod sursa (job #166447)
Cod sursa(job #166447)
#include <stdio.h>
#include <stdlib.h>
long i,n,y[100000],x[100000],sol[100000],ind[100000],j,s[100000],max=-320000,nr;
int comp(const void * n1 ,const void * n2){
return x[*((long*)n1)]-x[*((long*)n2)];
}
int seg(int x1,int y1,int x2,int y2)
{
if((x1<x2&&x2<y1)|(x1<y2&&y2<y1)|(x2<x1&&x1<<y2)|(x2<y1&&y1<y2))
return 0;
else return 1;
}
int main ()
{
freopen("heavymetal.in","r",stdin);
freopen("heavymetal.out","w",stdout);
//citire
scanf("%ld\n",&n);
for(i=1;i<=n;i++)
{scanf("%ld %ld\n",&x[i],&y[i]);ind[i]=i;sol[i]=1;s[i]=y[i]-x[i];}
//sortare
qsort(ind+1,n,sizeof(long),comp);
//program
for(i=n-1;i>=1;i--)
{
for(j=i+1;j<=n;j++)
if(sol[ind[i]]<=sol[ind[j]]+1&&
s[ind[j]]+y[ind[i]]-x[ind[i]]>s[ind[i]]&&
seg(x[ind[i]],y[ind[i]],x[ind[j]],y[ind[j]])
)
{
sol[ind[i]]=sol[ind[j]]+1;
s[ind[i]]=s[ind[j]]+y[ind[i]]-x[ind[i]];
}
if(sol[ind[i]]==0){sol[ind[i]]++;s[ind[i]]=y[ind[i]]-x[ind[i]];}
if(s[ind[i]]>=max){max=s[ind[i]];nr=ind[i];}
}
for(i=1;i<=n;i++)
printf("%ld %ld %ld %ld\n",x[ind[i]],y[ind[i]],sol[ind[i]],s[ind[i]]);
printf("%ld",max);
fclose(stdin);
fclose(stdout);
return 0;
}