Pagini recente » Cod sursa (job #645313) | Cod sursa (job #2243962) | Cod sursa (job #2708661) | Cod sursa (job #1464923) | Cod sursa (job #36784)
Cod sursa(job #36784)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define NX 3501
#define shift(X) X += X & ( X ^ (X-1) )
#define strip(X) X &= X - 1
struct cutie {
int x, y, z;
};
struct cmp {
bool operator() ( cutie a, cutie b ) {
return a.z < b.z;
}
};
cutie v[NX];
int N, T;
inline
void umax( int& x, int y ) {
if( x < y )
x = y;
}
struct BIT {
int a[NX][NX];
void update( int x, int y, int val ) {
int i, j;
for( i = x; i <= N; shift(i) )
for( j = y; j <= N; shift(j) )
umax( a[i][j], val );
}
int query( int x, int y ) {
int i, j, r = 0;
for( i = x; i; strip(i) )
for( j = y; j; strip(j) )
umax( r, a[i][j] );
return r;
}
void xx() {
int i;
for( i = 0; i <= N; i++ )
a[i][0] = a[0][i] = 0;
}
void init( int x, int y ) {
int i, j;
for( i = x; i <= N; shift(i) )
for( j = y; j <= N; shift(j) )
a[i][j] = 0;
}
} A;
void cit() {
int i, val, best;
scanf( "%d%d", &N, &T );
if( N > 100 )
exit( 66 );
A.xx();
for( ; T; T-- ) {
best = 0;
for( i = 1; i <= N; i++ ) {
scanf( "%d%d%d", &v[i].x, &v[i].y, &v[i].z );
A.init( v[i].x, v[i].y );
A.init( v[i].x-1, v[i].y-1 );
}
sort( v+1, v+1+N, cmp() );
for( i = 1; i <= N; i++ ) {
val = A.query( v[i].x - 1, v[i].y - 1 ) + 1;
A.update( v[i].x, v[i].y, val );
umax( best, val );
}
printf( "%d\n", best );
}
}
int main() {
freopen( "cutii.in", "r", stdin );
freopen( "cutii.out", "w", stdout );
cit();
return 0;
}