Pagini recente » Cod sursa (job #257420) | Cod sursa (job #709009) | Cod sursa (job #2249976) | Cod sursa (job #943533) | Cod sursa (job #287594)
Cod sursa(job #287594)
#include <algorithm>
#include <stdio.h>
#define bitAib(x) ((x & (x - 1)) ^ x)
#define MAX 3510
#define f first
#define s second
using namespace std;
pair <int, pair <int, int> > vctDim[MAX];
short aib2D[MAX][MAX];
int n, testCases;
inline void updateAib(int x, int y, short key)
{
for (int i = x; i <= n; i += bitAib(i))
for (int j = y; j <= n; j += bitAib(j))
aib2D[i][j] = max(aib2D[i][j], key);
}
inline void clearAib(int x, int y)
{
for (int i = x; i <= n; i += bitAib(i))
for (int j = y; j <= n; j += bitAib(j))
aib2D[i][j] = 0;
}
inline int queryAib(int x, int y)
{
short maxGs = 0;
for (int i = x; i; i -= bitAib(i))
for (int j = y; j; j -= bitAib(j))
maxGs = max(maxGs, aib2D[i][j]);
return maxGs;
}
int main()
{
freopen("cutii.in", "r", stdin);
freopen("cutii.out", "w", stdout);
for (scanf("%d %d", &n, &testCases); testCases; testCases--)
{
for (int i = 1; i <= n; i++)
scanf("%d %d %d", &vctDim[i].f, &vctDim[i].s.f, &vctDim[i].s.s);
sort(vctDim + 1, vctDim + 1 + n);
short maxGs = 0;
for (int i = 1; i <= n; i++)
{
short sol = queryAib(vctDim[i].s.f, vctDim[i].s.s) + 1;
maxGs = max(maxGs, sol);
updateAib(vctDim[i].s.f, vctDim[i].s.s, sol);
}
for (int i = 1; i <= n; i++)
clearAib(vctDim[i].s.f, vctDim[i].s.s);
printf("%d\n", maxGs);
}
fclose(stdin);
fclose(stdout);
return 0;
}