Cod sursa(job #235588)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 24 decembrie 2008 16:04:08
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<iostream>
#include<stdio.h>
FILE *f=fopen("cutii.in","r"),*g=fopen("cutii.out","w");
int a[3501][4],n,t;
int divide(int st,int dr)
{
 int aux1=a[st][1],aux2=a[st][2],aux3=a[st][3];
 while(st<dr)
 {
  while(st<dr&&a[dr][1]>aux1)
   dr--;
  a[st][1]=a[dr][1];a[st][2]=a[dr][2];a[st][3]=a[dr][3];
  while(st<dr&&a[st]<aux1)
   st--;
  a[dr][1]=a[st][1];a[dr][2]=a[st][2];a[dr][3]=a[st][3];
 }
 a[st][1]=aux1;a[st][2]=aux2;a[st][3]=aux3;
 return st;
}
void qsort(int st,int dr)
{
 int m=divide(st,dr);
 if(m-1>st) qsort(st,m-1);
 if(m+1<dr) qsort(m+1,dr);
}
int scmax()
{
 int l[3501],i,j,max;
 l[n]=1;
 for(int k=n-1;k>=1;k--)
 {
  max=0;
  for(j=k+1;j<=n;j++)
  {
   if(a[j][2]>a[k][2]&&a[j][3]>a[k][3]&&l[j]>max)
    max=l[j];
  }
  l[k]=max+1;
 }
 for(i=1;i<=n;i++)
  if(l[i]>max) 
   max=l[i];
 return max; 
}
int main()
{
 fscanf(f,"%d %d",&n,&t)
 for(int i=1;i<=t;i++)
 {
  for(int i1=1;i1<=n;i1++)
   fscanf(f,"%d %d %d",&a[i1][1],&a[i1][2],&a[i1][3]);
  qsort(1,n);
  fprintf(g,"%d\n",scmax());
 }
 return 0;
}