Pagini recente » Cod sursa (job #1130199) | Cod sursa (job #1872025) | Cod sursa (job #1475607) | Cod sursa (job #1155736) | Cod sursa (job #35445)
Cod sursa(job #35445)
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define NX 101
struct ent {
int x, y, z;
};
struct cmp {
bool operator() ( ent a, ent b ) {
return a.z < b.z;
}
};
ent v[NX];
int M, N;
int A[NX][NX];
void init() {
memset( A, 0, sizeof( A ) );
}
void umax( int& x, int y ) {
if( x < y )
x = y;
}
void update( int l, int c, int x ) {
int i, j;
for( i = l; i <= N; i += i & ( i^(i-1) ) )
for( j = l; j <= N; j += j & ( j^(j-1) ) )
umax( A[i][j], x );
}
int query( int l, int c ) {
int r = 0, i, j;
for( i = l; i; i &= i-1 )
for( j = c; j; j &= j-1 )
umax( r, A[i][j] );
return r;
}
void cit() {
int i, tmax, vmax;;
scanf( "%d%d", &N, &M );
if( N > 100 )
exit( 66 );
for( ; M; M-- ) {
for( i = 0; i < N; i++ )
scanf( "%d%d%d", &v[i].x, &v[i].y, &v[i].z );
sort( v, v+N, cmp() );
init();
update( v[0].x, v[0].y, 1 );
tmax = 0;
for( i = 1; i < N; i++ ) {
vmax = 0;
umax( vmax, query( v[i].x - 1, v[i].y - 1 ) );
vmax++;
update( v[i].x, v[i].y, vmax );
umax( tmax, vmax );
}
printf( "%d\n", tmax );
}
}
int main() {
freopen( "cutii.in", "r", stdin );
freopen( "cutii.out", "w", stdout );
cit();
return 0;
}