Cod sursa(job #808945)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 7 noiembrie 2012 17:44:18
Problema Cutii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb

#include <cstdio>

const int MAX_SIZE(3501);

int n;
int boxes [MAX_SIZE] [3];
int sorted [MAX_SIZE];
int max_length [MAX_SIZE];

inline void read (void)
{
	for (int i(1) ; i <= n ; ++i)
	{
		std::scanf("%d%d%d",&boxes[i][0],&boxes[i][1],&boxes[i][2]);
		sorted[*boxes[i]] = i;
	}
}

inline bool fit (int a, int b)
{
	a = sorted[a];
	b = sorted[b];
	return boxes[a][1] < boxes[b][1] && boxes[a][2] < boxes[b][2];
}

inline int maximum_increasing_substring (void)
{
	max_length[1] = 1;
	int i, j, length, max(-1);
	for (i = 2 ; i <= n ; ++i)
	{
		length = 1;
		for (j = i - 1 ; j ; --j)
		{
			if (fit(j,i))
				if (max_length[j] + 1 > length)
					length = max_length[j] + 1;
		}
		max_length[i] = length;
		if (length > max)
			max = length;
	}
	return max;
}

int main (void)
{
	std::freopen("cutii.in","r",stdin);
	std::freopen("cutii.out","w",stdout);
	int t;
	std::scanf("%d%d",&n,&t);
	do
	{
		read();
		std::printf("%d\n",maximum_increasing_substring());
		--t;
	}
	while (t);
	std::fclose(stdin);
	std::fclose(stdout);
	return 0;
}