Cod sursa(job #17977)

Utilizator lucibitLucian Onea lucibit Data 17 februarie 2007 16:36:24
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<stdio.h>
#define maxN 3500
int N,T,x[maxN],y[maxN],z[maxN],l[maxN];
void interclaseaza(int p, int q)
{int m=(p+q)/2 ;
 int i,j,k,a1[maxN],a2[maxN],a3[maxN];
 i=p; j=m+1; k=0;
 while (i<=m && j<=q)
	{if (z[i]<=z[j]) {a1[++k]=x[i];
						 a2[k]=y[i];
						 a3[k]=z[i];
						 i++;}
	else {a1[++k]=x[j];
		  a2[k]=y[j];
		  a3[k]=z[j];
			j++;}

	 }
  while (i<=m) {a1[++k]=x[i];
					 a2[k]=y[i];
					 a3[k]=z[i];
					 i++;}
  while (j<=q){a1[++k]=x[j];
					 a2[k]=y[j];
					 a3[k]=z[j];
					 j++;}
  for(i=p,k=1;i<=q;i++,k++)
  {x[i]=a1[k];
	y[i]=a2[k];
	z[i]=a3[k];
	}


 }
void sort(int p, int q)
{if(p!=q){sort(p,(p+q)/2);
			 sort((q+p)/2+1, q);
			 interclaseaza(p,q);

			  }
 }

int main ()
{freopen ("cutii.in","r",stdin);
 int j,i,max,k1,k2;
 scanf("%d %d\n",&N,&T);
 freopen("cutii.out","w",stdout);
 for (i=1;i<=T;i++)
  {for(j=1;j<=N;j++) scanf("%d %d %d\n",&x[j],&y[j],&z[j]);
	  sort(1,N);
	l[N]=1;
	for(k1=N+1;k1>=1;k1--)
	 {max=0;
		for(k2=k1+1;k2<=N;k2++) if(x[k2]>x[k1] && y[k2]>y[k1] && max<l[k2]) max=l[k2];
		l[k1]=max+1;
	  }
	  printf("%d\n",l[1]);
	}

 return 0;}