Cod sursa(job #45148)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 1 aprilie 2007 02:33:28
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
// Problema cutii

#include <stdio.h>
#define MAX      3501

int d[MAX][3];

int pozitie( int st, int dr )
{
    long piv = d[st][0]*d[st][1]*d[st][2];
    int L,l,h;
    int i=st-1, j = dr+1;
    do{
        do{ i++; }while( d[i][0]*d[i][1]*d[i][2] < piv );
        do{ j--; }while( d[j][0]*d[j][1]*d[j][2] > piv );
        if( i < j )
                {
                    L = d[i][0]; l = d[i][1]; h = d[i][2];
                    d[i][0] = d[j][0];
                    d[i][1] = d[j][1];
                    d[i][2] = d[j][2];
                    d[j][0] = L; d[j][1] = l; d[j][2] = h;
                }
                
    }while( i < j );
    return j;
}

int qs( int st, int dr )
{
     if( st == dr ) return 0;
     int m = pozitie( st, dr );
     qs( st, m );
     qs( m+1, dr );
     return 0;
}


int main()
{
    int n, t, i, j, max;
    freopen( "cutii.in", "rt", stdin );
             scanf( "%d %d", &n, &t );    
    freopen( "cutii.out", "wt", stdout );
             while( t )
                    {
                      t--;
                      for( i=1; i<=n; i++ ) 
                           scanf( "%d %d %d", &d[i][0], &d[i][1], &d[i][2] );
                      qs( 1, n );
                      max = 1;
                      j =1;
                      for( i=1; i<n; i++ )
                           if( ( d[i][0] < d[i+1][0] ) && ( d[i][1] < d[i+1][1] ) && ( d[i][2] < d[i+1][2] ) )
                               {
                                         j++;
                                         if( j > max ) max = j;
                               }
                               else j=1;
                      printf( "%d\n", max );                                                 
                    }
    fclose( stdin );
    fclose( stdout );
    return 0;
}