Pagini recente » Cod sursa (job #791700) | Cod sursa (job #2418130) | Istoria paginii utilizator/biznis | Cod sursa (job #208397) | Cod sursa (job #1425973)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define Nmax 3504
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
int n, i, j, t, best[Nmax];
int aib[Nmax][Nmax];
struct nod
{
int x;
int y;
int z;
} v[Nmax];
int cmp(const nod a, const nod b)
{
if (a.x == b.x && a.y == b.y) return a.z > b.z;
if (a.x == b.x) return a.y > b.y;
return a.x < b.x;
}
void uaib(int x, int y, int z)
{
int i, j;
for (i = x; i <= n; i += zeros(i))
for (j = y; j <= n; j += zeros(j))
aib[i][j] = max(aib[i][j], z);
}
int val_max(int x, int y)
{
int i, j, maxAIB = 0;
for (i = x; i >= 1; i -= zeros(i))
for (j = y; j >= 1; j -= zeros(j))
maxAIB = max (aib[i][j], maxAIB);
return maxAIB;
}
void readd()
{
for (i = 1; i <= n; ++i)
{
scanf("%d %d %d", &v[i].x, &v[i].y, &v[i].z);
}
sort(v + 1, v + n + 1, cmp);
for (i = 1; i <= n; ++i)
{
best[i] = val_max(v[i].y - 1, v[i].z - 1) + 1;
uaib(v[i].y, v[i].z, best[i]);
}
}
void solve()
{
int sol = 0;
for (i = 1; i <= n; ++i)
sol = max(sol, best[i]);
printf("%d\n", sol);
memset(aib, 0, sizeof(aib));
memset(best, 0, sizeof(best));
}
int main()
{
freopen("cutii.in", "r", stdin);
freopen("cutii.out", "w", stdout);
scanf("%d %d", &n, &t);
while (t--)
{
readd();
solve();
}
return 0;
}