Pagini recente » Cod sursa (job #893260) | Cod sursa (job #2000594) | Cod sursa (job #293934) | Cod sursa (job #511799) | Cod sursa (job #45152)
Cod sursa(job #45152)
// Problema cutii
#include <stdio.h>
#define MAX 3501
long d[MAX][3];
int c[MAX];
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( "%ld %ld %ld", &d[i][0], &d[i][1], &d[i][2] );
qs( 1, n );
max = 1;
c[1] = 1;
for( i=2; i<=n; i++ )
{
c[i] = 1;
for( j=1; j<i; j++ )
if( ( d[j][0] < d[i][0] ) && ( d[j][1] < d[i][1] ) && ( d[j][2] < d[i][2] ) )
if( c[j]+1 > c[i] )
{
c[i] = c[j]+1;
if( c[i] > max ) max = c[i];
}
}
printf( "%d\n", max );
}
fclose( stdin );
fclose( stdout );
return 0;
}