Cod sursa(job #114)

Utilizator alextheroTandrau Alexandru alexthero Data 5 decembrie 2006 13:17:55
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#include <algorithm>

#define nmax 3505

using namespace std;

int place[nmax],x[nmax],y[nmax],z[nmax],cate[nmax],max,n,t;

int cmp(int i,int j) {
    if(x[i]>x[j]) return 0;
    else if(x[i]==x[j]) {
         if(y[i]>y[j]) return 0;
         else if(y[i]==y[j]) {
              if(z[i]>z[j]) return 0;
              else return 1;
         }
         else return 1;
    }
    else return 1;   
}

int maimare(int i,int j) {
    if ((x[i]>x[j]) && (y[i]>y[j]) && (z[i]>z[j])) return 1;
    else return 0;
}

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