Pagini recente » Cod sursa (job #2652198) | Cod sursa (job #768134) | Cod sursa (job #379988) | Cod sursa (job #2081023) | Cod sursa (job #1429783)
#include <cstdio>
#include <algorithm>
#define sum(x) (x&(-x))
#define f first
#define s second
using namespace std;
int aib[3510][3510], n, t;
pair < int, pair <int, int> > v[3510];
inline int query (int x, int y)
{
int rez = 0;
for (int i = x - 1; i; i -= sum (i))
rez = max (rez, aib[i][y]);
for (int i = y - 1; i; i -= sum (i))
rez = max (rez, aib[x][i]);
for (int i = x - 1; i; i -= sum (i))
for (int j = y - 1; j; j -= sum (j))
rez = max (rez, aib[i][j]);
return rez + 1;
}
inline void add (int x, int y)
{
for (int i = x + 1; i <= 3500; i += sum(i))
aib[i][y] = max (aib[x][y], aib[i][y]);
for (int i = y + 1; i <= 3500; i += sum(i))
aib[x][i] = max (aib[x][y], aib[x][i]);
for (int i = x + 1; i <= 3500; i += sum(i))
for (int j = y + 1; j <= 3500; j += sum(j))
aib[i][j] = max (aib[x][y], aib[i][j]);
}
inline void del (int x, int y)
{
aib[x][y] = 0;
for (int i = x + 1; i <= 3500; i += sum(i))
aib[i][y] = 0;
for (int i = y + 1; i <= 3500; i += sum(i))
aib[x][i] = 0;
for (int i = x + 1; i <= 3500; i += sum(i))
for (int j = y + 1; j <= 3500; j += sum(j))
aib[i][j] = 0;
}
int main ()
{
freopen ("cutii.in", "r", stdin);
freopen ("cutii.out", "w", stdout);
scanf ("%d %d", &n, &t);
for (; t; --t)
{
for (int i = 1; i <= n; ++i)
scanf ("%d %d %d", &v[i].f, &v[i].s.f, &v[i].s.s);
sort (v + 1, v + n + 1);
int rez = 0;
for (int i = 1; i <= n; ++i)
{
int x = query (v[i].s.f, v[i].s.s);
rez = max (rez, x);
aib[v[i].s.f][v[i].s.s] = x;
add (v[i].s.f, v[i].s.s);
}
printf ("%d\n", rez);
for (int i = 1; i <= n; ++i)
del (v[i].s.f, v[i].s.s);
}
return 0;
}