Pagini recente » Borderou de evaluare (job #335414) | Cod sursa (job #15116)
Cod sursa(job #15116)
// [n * (n - 1) / 2]
#include <stdio.h>
#define nmax 3505
int parcurg(int);
int N,T,t,i,j;
int L[nmax][nmax];
int X[nmax], Y[nmax], Z[nmax], MAX[nmax];
int main(void)
{
freopen("cutii.in", "r", stdin);
freopen("cutii.out", "w", stdout);
scanf("%d%d", &N, &T);
for (t = 1; t <= T; ++t)
{
for (i = 1; i <= N; ++i)
L[0][i] = MAX[i] = 0;
for (i = 1; i <= N; ++i)
{
scanf("%d%d%d", &X[i], &Y[i], &Z[i]);
for (j = 1; j < i; ++j)
if (X[j] > X[i] && Y[j] > Y[i] && Z[j] > Z[i])
L[++L[0][j]][j] = i;
else if (X[j] < X[i] && Y[j] < Y[i] && Z[j] < Z[i])
L[++L[0][i]][i] = j;
}
for (i = 1; i <= N; ++i)
if (!MAX[i])
MAX[i] = parcurg(i);
for (i = 1, MAX[0] = 0; i <= N; ++i)
MAX[0] = MAX[i] > MAX[0]? MAX[i]: MAX[0];
printf("%d\n", MAX[0]);
}
return 0;
}
int parcurg(int x)
{
int i, nr = 0;
for (i = 1; i <= L[0][x]; ++i)
{
if (!MAX[L[i][x]])
MAX[L[i][x]] = parcurg(L[i][x]);
nr = nr > MAX[L[i][x]]? nr: MAX[L[i][x]];
}
return 1 + nr;
}