Cod sursa(job #309747)

Utilizator Andrei200Andrei200 Andrei200 Data 1 mai 2009 00:08:40
Problema Cutii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <stdio.h>

long int gasit,i,j,n,m,l[3502],L[3502],h[3502],v[3502],x,ii;

void qsort(long int li, long int ls)
{
 long int i,j,x,y;
 i=li; j=ls; x=v[(li+ls)>>1];
 while (i<=j)
      {
       while (v[i]>x) i++;
       while (v[j]<x) j--;
       if (i<=j)
{
 y=v[i]; v[i]=v[j]; v[j]=y;
 y=l[i]; l[i]=l[j]; l[j]=y;
 y=L[i]; L[i]=L[j]; L[j]=y;
 y=h[i]; h[i]=h[j]; h[j]=y;
 i++; j--;
}
      }
 if (i<ls) qsort(i,ls);
 if (j>li) qsort(li,j);
}

int intra(long int i, long int j)
{
 long int gasit=1;
 if (l[i]>l[j] && L[i]>L[j] && h[i]>h[j])
   gasit=0;
 return gasit;
}

int main()
{
 FILE *g=fopen("cutii.out","w");
 FILE *f=fopen("cutii.in","r");
 fscanf(f,"%ld %ld",&n,&m);
 for (ii=1;ii<=m;ii++)
    {
 for (i=1;i<=n;i++)
    fscanf(f,"%ld %ld %ld",&l[i],&L[i],&h[i]);

 for (i=1;i<=n;i++)
    v[i]=l[i]*L[i]*h[i];

 qsort(1,n);

 for (i=1;i<=n+2;i++)
    v[i]=0;
 v[n]=1;
 long int max=0;
 for (i=n-1;i>=1;i--)
    {
     max=0;
     for (j=i+1;j<=n;j++)
if (v[j]>=max && intra(i,j)==0)
 {
  max=v[j];
  break;
 }
     v[i]=max+1;
    }

 max=0;
 for (i=1;i<=n;i++)
    if (max<=v[i])
      max=v[i];

 fprintf(g,"%ld\n",max);
 }
 fclose(f);
 fclose(g);
 return 0;
}