Pagini recente » Cod sursa (job #1584775) | Cod sursa (job #1892648) | Cod sursa (job #1683409) | Cod sursa (job #2141839) | Cod sursa (job #1171488)
# include <fstream>
# include <cstring>
# include <algorithm>
# include <vector>
# define dim 3505
using namespace std;
ifstream fin( "cutii.in" );
ofstream fout( "cutii.out" );
int n, t;
struct cutie
{
int X, Y, Z;
};
cutie a[ dim ];
int dm[ dim ], dp[ dim ];
inline bool cmp( cutie a, cutie b )
{
if ( a.X == b.X && a.Y == b.Y )
return a.Z < b.Z;
else
if ( a.X == b.X )
return a.Y < b.Y;
else
return a.X < b.X;
}
void afiseaza()
{
int i;
for ( i = 1 ; i <= n ; i++ )
fout << a[ i ].X << " " << a[ i ].Y << " " << a[ i ].Z << "\n";
fout << "\n";
}
void init()
{
int i;
for ( i = 1 ; i <= n ; i++ )
dp[ i ] = 0;
}
void rezolva()
{
int maxim, sol = 1, ok = 0;
dp[ n ] = dm[ n ] = 1;
for ( int i = n - 1 ; i >= 1 ; i-- )
{
maxim = 0;
ok = 0;
for ( int j = i + 1 ; j <= n && ok == 0 ; j ++ )
{
if ( a[ i ].X < a[ j ].X && a[ i ].Y < a[ j ].Y && a[ i ].Z < a[ j ].Z && maxim < dp[ j ] )
maxim = dp[ j ];
if ( maxim == dm[ i + 1 ] )
ok = 1;
}
dp[ i ] = maxim + 1;
dm[ i ] = max( dm[ i + 1 ], maxim + 1 );
if ( sol < dp[ i ] )
sol = dp[ i ];
}
fout << sol << "\n";
}
void citire()
{
fin >> n >> t;
for ( ; t; --t )
{
for (int j = 1 ; j <= n ; j++ )
fin >> a[ j ].X >> a[ j ].Y >> a[ j ].Z;
sort( a + 1, a + n + 1, cmp );
rezolva();
init();
}
}
int main()
{
citire();
return 0;
}