Cod sursa(job #1494163)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 30 septembrie 2015 19:34:32
Problema Cutii Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 3500
int x[MAXN],y[MAXN],z[MAXN],l[MAXN];
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);
}
int main(){
    FILE*fi,*fout;
    int t,i,nr,j,max,n;
    fi=fopen("cutii.in" ,"r");
    fout=fopen("cutii.out" ,"w");
    fscanf(fi,"%d%d" ,&n,&t);
    while(t){
        for(j=0;j<n;j++)
            fscanf(fi,"%d%d%d" ,&x[j],&y[j],&z[j]);
        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;
}