Pagini recente » Cod sursa (job #510744) | Cod sursa (job #3150153) | Cod sursa (job #753804) | Cod sursa (job #2768189) | Cod sursa (job #1264524)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin( "cutii.in" );
ofstream fout( "cutii.out" );
const int nmax = 3500;
int sol, n, aib[ nmax + 1 ][ nmax + 1 ];
struct str{ int x, y, z; } v[ nmax + 1 ];
bool cmp( str a, str b ) {
return (a.x < b.x);
}
inline int lsb( int x ) {
return ( x & -x );
}
void init() {
for( int k = 0; k < n; ++ k ) {
for( int i = v[ k ].y; i <= n; i += lsb( i ) ) {
for( int j = v[ k ].z; j <= n; j += lsb( i ) ) {
aib[ i ][ j ] = 0;
}
}
}
}
int query( int y, int z ) {
int ans = 0;
for( int i = y - 1; i > 0; i -= lsb( i ) ) {
for( int j = z - 1; j > 0; j -= lsb( j ) ) {
if ( aib[ i ][ j ] > ans ) {
ans = aib[ i ][ j ];
}
}
}
return ans;
}
void update( int y, int z, int val ) {
for( int i = y; i <= n; i += lsb( i ) ) {
for( int j = z; j <= n; j += lsb( j ) ) {
aib[ i ][ j ] = aib[ i ][ j ] < val ? val : aib[ i ][ j ];
}
}
}
int main() {
int t, k;
fin >> n >> t;
while ( t -- ) {
for( int i = 0; i < n; ++ i ) {
fin >> v[ i ].x >> v[ i ].y >> v[ i ].z;
}
sort( v, v + n, cmp );
sol = 0;
for( int i = 0; i < n; ++ i ) {
k = query( v[ i ].y, v[ i ].z ) + 1;
sol = k < sol ? sol : k;
update( v[ i ].y, v[ i ].z, k );
}
fout << sol << "\n";
init();
}
fin.close();
fout.close();
return 0;
}