Pagini recente » Cod sursa (job #1969836) | Cod sursa (job #2935231) | Cod sursa (job #2177248) | Cod sursa (job #2328653) | Cod sursa (job #1976552)
#include<cstdio>
#include<vector>
#include<algorithm>
#define X first
#define Y second.first
#define Z second.second
using namespace std;
FILE * fin = fopen("cutii.in","r");
FILE * fout = fopen("cutii.out","w");
int n, T, sol;
int aib[3505][3505];
pair< int, pair<int,int> > v[3505];
vector< pair< int, pair<int,int> > > updates;
void upd( int I, int J, int x ){
for( int i = I; i <= n; i += ( i & (-i) ) )
for( int j = J; j <= n; j += ( j & (-j) ) )
aib[i][j] = max( aib[i][j], x );
return;
}
int query( int I, int J ){
int maxim = 0;
for( int i = I; i >= 1; i -= ( i & (-i) ) )
for( int j = J; j >= 1; j -= ( j & (-j) ) )
maxim = max( aib[i][j], maxim );
return maxim;
}
void reset( int I, int J ){
for( int i = I; i <= n; i += ( i & (-i) ) )
for( int j = J; j <= n; j += ( j & (-j) ) )
aib[i][j] = 0;
return;
}
int main(){
fscanf( fin, "%d%d", &n, &T );
for( int t = 1; t <= T; t++ ){
for( int i = 1; i <= n; i++ ){
fscanf( fin, "%d%d%d", &v[i].X, &v[i].Y, &v[i].Z );
}
sort( v + 1, v + n + 1 );
sol = 0;
for( int i = 1; i <= n; i++ ){
if( v[i].X != v[i - 1].X ){
while( !updates.empty() ){
upd( updates.back().X, updates.back().Y, updates.back().Z );
updates.pop_back();
}
}
int val = query( v[i].Y - 1, v[i].Z - 1 ) + 1;
updates.push_back( make_pair( v[i].Y, make_pair( v[i].Z, val ) ) );
sol = max( sol, val );
}
updates.clear();
for( int i = 1; i <= n; i++ ){
reset( v[i].Y, v[i].Z );
}
fprintf( fout, "%d\n", sol );
}
return 0;
}