Pagini recente » Cod sursa (job #950955) | Cod sursa (job #2938711) | Cod sursa (job #106497) | Cod sursa (job #558809) | Cod sursa (job #1642507)
#include<cstdio>
#include<algorithm>
#include<cmath>
#define DIM 3502
#define LSB(x) (x & (-x))
#define x first
#define y second.x
#define z second.second
using namespace std;
FILE *fin = freopen("cutii.in", "r", stdin);
FILE *fout = freopen("cutii.out", "w", stdout);
int N, T;
int aib[DIM][DIM];
pair <int, pair <int, int> > v[3510];
void Update(int, int);
int Query(int, int);
void Remove(int, int);
int main()
{
scanf("%d%d", &N, &T);
while (T--)
{
for (int i = 1; i <= N; i++)
scanf("%d%d%d", &v[i].x, &v[i].y, &v[i].z);
sort (v + 1, v + N + 1);
int sol = 0;
for (int i = 1; i <= N; i++)
{
int nr = Query(v[i].y, v[i].z) + 1;
aib[v[i].y][v[i].z] = nr;
Update(v[i].y, v[i].z);
sol = max(sol, nr);
}
for (int i = 1; i <= N; i++)
Remove(v[i].y, v[i].z);
printf("%d\n", sol);
}
}
void Update(int a, int b)
{
for (int i = a; i <= N; i += LSB(i))
for (int j = b; j <= N; j += LSB(j))
aib[i][j] = max(aib[i][j], aib[a][b]);
}
int Query(int a, int b)
{
int sol = 0;
for (int i = a - 1; i; i -= LSB(i))
for (int j = b - 1; j; j -= LSB(j))
sol = max(aib[i][j], sol);
return sol;
}
void Remove(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;
}