Pagini recente » Cod sursa (job #3263471) | Cod sursa (job #1429972) | Cod sursa (job #2349137) | Cod sursa (job #2491564) | Cod sursa (job #239377)
Cod sursa(job #239377)
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAX_N = 3500;
struct cutie {
short int x, y, z;
};
short int n, t, sol;
short int aib[MAX_N][MAX_N];
cutie a[MAX_N];
int cmp(cutie a, cutie b)
{
return a.z < b.z;
}
short int lsb(short int x) { return (x & (x - 1)) ^ x; }
short int query(short int x, short int y)
{
short int i, j, ret = 0;
for (i = x; i > 0; i -= lsb(i))
for (j = y; j > 0; j -= lsb(i))
if (aib[i][j] > ret) ret = aib[i][j];
return ret;
}
void update(short int x, short int y, short int z)
{
short int i, j;
for (i = x; i <= n; i += lsb(i))
for (j = y; j <= n; j += lsb(j))
if (z > aib[i][j]) aib[i][j] = z;
}
int main()
{
short int i;
freopen("cutii.in", "r", stdin);
freopen("cutii.out", "w", stdout);
scanf("%d %d", &n, &t);
for (; t; --t)
{
memset(a, 0, sizeof(a));
memset(aib, 0, sizeof(aib));
sol = 0;
for (i = 1; i <= n; ++i)
scanf("%hd %hd %hd", &a[i].x, &a[i].y, &a[i].z);
sort(a + 1, a + n + 1, cmp);
for (i = 1; i <= n; ++i)
{
int k = query(a[i].x - 1, a[i].y - 1) + 1;
if (k > sol) sol = k;
update(a[i].x, a[i].y, k);
}
printf("%hd\n", sol);
}
}