Cod sursa(job #607515)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 12 august 2011 14:10:55
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<stdio.h>
#define N 3501
int i,n,t,x[N],y[N],z[N],a[N],b[N],c[N],l[N],max,k;

void merge(int x[N],int y[N],int z[N],int p,int q)
{int m=(p+q)/2,i,j,k;
if(p==q)
      return;
merge(x,y,z,p,m);
merge(x,y,z,m+1,q);
for(i=p,j=m+1,k=p;i<=m||j<=q;)
if(j>q||(i<=m&&x[i]<x[j]))
      {a[k]=x[i];
      b[k]=y[i];
      c[k++]=z[i++];}
else
      {a[k]=x[j];
      b[k]=y[j];
      c[k++]=z[j++];}
for(i=p;i<=q;i++)
      {x[i]=a[i];
      y[i]=b[i];
      z[i]=c[i];}}

int main()
{freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d",&n,&t);
while(t--)
      {for(i=1;i<=n;i++)
              scanf("%d%d%d",&x[i],&y[i],&z[i]);
      merge(x,y,z,1,n);
      l[n]=1;
      for(k=n-1;k;k--)
              {max=0;
              for(i=k+1;i<=n;i++)
              if(l[i]>max&&y[i]>y[k]&&z[i]>z[k])
                      max=l[i];
              l[k]=1+max;}
      printf("%d\n",l[1]);}
return 0;}