Pagini recente » Cod sursa (job #270550) | Cod sursa (job #2734859) | Cod sursa (job #3264416) | Cod sursa (job #2806693) | Cod sursa (job #1522215)
#include <cstdio>
#include <algorithm>
#define tt first
#define f second.tt
#define s second.second
using namespace std;
pair <int, pair <int, int> > v[3510];
int n, aib[3510][3510];
inline void add (int a, int b)
{
for (int i = a; i <= n; i += i & (-i))
for (int j = b; j <= n; j += j & (-j))
aib[i][j] = max (aib[i][j], aib[a][b]);
}
inline int querry (int a, int b)
{
int rez = 0;
for (int i = a - 1; i; i -= i & (-i))
for (int j = b - 1; j; j -= j & (-j))
rez = max (aib[i][j], rez);
return rez;
}
inline void del (int a, int b)
{
for (int i = a; i <= n; i += i & (-i))
for (int j = b; j <= n; j += j & (-j))
aib[i][j] = 0;
}
int main ()
{
freopen ("cutii.in", "r", stdin);
freopen ("cutii.out", "w", stdout);
int t;
scanf ("%d %d", &n, &t);
for (; t; --t)
{
for (int i = 1; i <= n; ++i)
scanf ("%d %d %d", &v[i].tt, &v[i].f, &v[i].s);
sort (v + 1, v + n + 1);
int rez = 0;
for (int i = 1; i <= n; ++i)
{
int x = querry (v[i].f, v[i].s) + 1;
aib[v[i].f][v[i].s] = x;
add (v[i].f, v[i].s);
rez = max (rez, x);
}
for (int i = 1; i <= n; ++i)
del (v[i].f, v[i].s);
printf ("%d\n", rez);
}
return 0;
}