Pagini recente » Cod sursa (job #1102689) | Cod sursa (job #783350) | Cod sursa (job #2981443) | Cod sursa (job #3174225) | Cod sursa (job #2757981)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int NMAX = 3500;
static inline int zeros( int x ) {
return x & -x;
}
int aib[NMAX + 1][NMAX + 1];
void update( int i, int j, int x, int n ) {
for ( int a = i; a <= n; a += zeros( a ) ) {
for ( int b = j; b <= n; b += zeros( b ) ) {
aib[a][b] = max( aib[a][b], x );
}
}
}
int query( int i, int j ) {
int res = 0;
for ( int a = i; a > 0; a -= zeros( a ) ) {
for ( int b = j; b > 0; b -= zeros( b ) )
res = max( res, aib[a][b] );
}
return res;
}
void reset( int n ) {
for ( int i = 0; i <= n; i ++ ) {
for ( int j = 0; j <= n; j ++ ) {
aib[i][j] = 0;
}
}
}
struct cutie {
int x;
int y;
int z;
} v[NMAX];
int ans[NMAX];
bool cmp( cutie a, cutie b ) {
if ( a.x < b.x )
return 1;
if ( a.x == b.x ) {
return a.y > b.y;
}
return 0;
}
int main() {
ifstream fin( "cutii.in" );
ofstream fout( "cutii.out" );
int t, n, i, maxim;
fin >> n >> t;
while ( t-- ) {
for ( i = 0; i < n; i ++ ) {
fin >> v[i].x >> v[i].y >> v[i].z;
}
sort( v, v + n, cmp );
maxim = 0;
for ( i = 0; i < n; i ++ ) {
ans[i] = query( v[i].y - 1, v[i].z - 1 ) + 1;
update( v[i].y, v[i].z, ans[i], n );
maxim = max( maxim, ans[i] );
}
fout << maxim << '\n';
reset( n );
}
return 0;
}