Cod sursa(job #167191)

Utilizator stefanrStefan Ruseti stefanr Data 29 martie 2008 10:20:57
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<fstream.h>
ifstream fin("cutii.in");
ofstream fout("cutii.out");

struct dim
{int x,y,z;} v[3501];

int n,t,d[3501];

int cmp(dim a,dim b)
{if(a.z<b.z) return 0;
 if(a.z>b.z) return 1;
 if(a.x<b.x) return 0;
 if(a.x>b.x) return 1;
 if(a.y<b.y) return 0;
 return 1;
}

int poz(int li,int ls)
{dim aux;
 int i=li,j=ls,i1[2]={0,1},j1[2]={-1,0},k=0;
 while(i<j)
  {if(cmp(v[i],v[j])==1)
    {aux=v[i];
     v[i]=v[j];
     v[j]=aux;
     k++;
    }
   i+=i1[k%2];
   j+=j1[k%2];
  }
 return i;
}

void sortare(int i,int j)
{if(i<j)
  {int m=poz(i,j);
   sortare(i,m-1);
   sortare(m+1,j);
  }
}


int nr()
{int i,j,max,maxim=0;
for(i=1;i<=n;i++) d[i]=0;
d[1]=1;
for(i=2;i<=n;i++)
 {max=0;
  for(j=i-1;j>=1;j--)
   if(v[j].x<v[i].x && v[j].y<v[i].y && d[j]>max) max=d[j];
  d[i]=max+1;
  if(d[i]>maxim) maxim=d[i];
 }
return maxim;
}

int main()
{fin>>n>>t;
int i,k;
for(k=1;k<=t;k++)
 {for(i=1;i<=n;i++) fin>>v[i].x>>v[i].y>>v[i].z;
  sortare(1,n);
  fout<<nr()<<"\n";
 }
fin.close();
fout.close();
return 0;
}