Cod sursa(job #1494459)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 1 octombrie 2015 09:46:49
Problema Cutii Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 3500
int x[MAXN],y[MAXN],z[MAXN],l[MAXN],lSize,conb;
char *buffer;
inline void swap(int b,int e,int *v){
    int aux=v[b];
    v[b]=v[e];
    v[e]=aux;
}
void myqsort(int begin,int end,int *v){
    int b=begin,e=end,pivot=v[(b+e)/2];
    while(b<=e){
        while(v[b]<pivot) b++;
        while(v[e]>pivot) e--;
        if(b<=e){
            swap(b,e,x);
            swap(b,e,y);
            swap(b,e,z);
            b++;
            e--;
        }
    }
    if(begin<e) myqsort(begin,e,v);
    if(b<end) myqsort(b,end,v);
}
inline int cit(){
    int nr=0;
    while(conb<lSize&&buffer[conb]>='0'&&buffer[conb]<='9'){
        nr=nr*10+buffer[conb]-'0';
        conb++;
    }
    return nr;
}
inline void blanc(){
    while(conb<lSize&&buffer[conb]<'0'||buffer[conb]>'9')
        conb++;
}
int main(){
    FILE*fi,*fout;
    int t,i,nr,j,max,n;
    fi=fopen("cutii.in" ,"rb");
    fout=fopen("cutii.out" ,"w");
    fseek(fi,0,SEEK_END);
    lSize=ftell(fi);
    rewind(fi);
    buffer=(char*) malloc(sizeof(char)*lSize);
    fread(buffer,1,lSize,fi);
    conb=0;
    n=cit();
    blanc();
    t=cit();
    blanc();
    while(t){
        for(i=0;i<n;i++){
            x[i]=cit();
            blanc();
            y[i]=cit();
            blanc();
            z[i]=cit();
            blanc();
        }
        myqsort(0,n-1,x);
        l[n-1]=1;
        nr=1;
        for(i=n-2;i>=0;i--){
            max=0;
            for(j=i+1;j<n;j++){
                if(max<l[j]&&y[i]<y[j]&&z[i]<z[j])
                   max=l[j];
            }
            l[i]=max+1;
            if(l[i]>nr)
                nr=l[i];
        }
        fprintf(fout,"%d\n" ,nr);
        t--;
    }
    fclose(fi);
    fclose(fout);
    return 0;
}