Pagini recente » Cod sursa (job #5285) | Cod sursa (job #2274192) | Cod sursa (job #1792174) | Autentificare | Cod sursa (job #1792224)
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
const int MAXN = 3510;
struct Paralelipiped{
int x, y, z;
};
int N, T;
Paralelipiped a[MAXN];
int aib[MAXN][MAXN];
int D[MAXN];
int rez;
void Update( int x, int y, int val );
int Query( int x, int y );
void Sterge( int x, int y );
bool Comp( const Paralelipiped& a, const Paralelipiped& b )
{
return a.x < b.x || ( a.x == b.x && a.y < b.y ) || ( a.x == b.x && a.y == b.y && a.z < b.z );
}
int main()
{
int i, j;
fin >> N >> T;
while ( T-- )
{
for ( i = 1; i <= N; i++ )
fin >> a[i].x >> a[i].y >> a[i].z;
sort( a + 1, a + 1 + N, Comp );
D[1] = rez = 1;
Update(a[1].y, a[1].z, 1);
for ( i = 2; i <= N; i++ )
{
D[i] = Query(a[i].y, a[i].z) + 1;
rez = max( rez, D[i] );
Update(a[i].y, a[i].z, D[i]);
}
fout << rez << '\n';
for ( i = 1; i <= N; i++ )
{
Sterge(a[i].y, a[i].z);
}
// memset(aib, 0, sizeof(aib));
}
fin.close();
fout.close();
return 0;
}
void Update( int x, int y, int val )
{
int i, j;
for ( i = x; i <= N; i += i & -i )
for ( j = y; j <= N; j += j & -j )
aib[i][j] = max( aib[i][j], val );
}
int Query( int x, int y )
{
int maxim = 0;
for ( int i = x; i >= 1; i -= i & -i )
for ( int j = y; j >= 1; j -= j & -j )
maxim = max( maxim, aib[i][j] );
return maxim;
}
void Sterge( int x, int y )
{
int i, j;
for ( i = x; i <= N; i += i & -i )
for ( j = y; j <= N; j += j & -j )
aib[i][j] = 0;
}