Pagini recente » Cod sursa (job #1930758) | Cod sursa (job #2278036) | Cod sursa (job #1637204) | Cod sursa (job #1794852) | Cod sursa (job #354961)
Cod sursa(job #354961)
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
struct Cutie
{
int x, y, z;
bool operator < (const Cutie &cutie) const
{
if (x < cutie.x)
return true;
if (x > cutie.x)
return false;
if (y < cutie.y)
return true;
if (y > cutie.y)
return false;
if (z < cutie.z)
return true;
return false;
}
};
bool intra(const Cutie &c1, const Cutie &c2)
{
if (c1.y < c2.y && c1.z < c2.z)
return true;
return false;
}
Cutie cutie[4096];
int best[4096];
set<pair<int, Cutie> > maxim;
int main()
{
freopen("cutii.in", "rt", stdin);
freopen("cutii.out", "wt", stdout);
int n, t;
scanf("%d%d", &n, &t);
for (int i = 0; i < t; i++)
{
maxim.clear();
memset(best, 0, n * sizeof(int));
for (int j = 0; j < n; j++)
{
scanf("%d%d%d", &cutie[j].x, &cutie[j].y, &cutie[j].z);
}
sort(cutie, cutie + n);
for (int j = 0; j < n; j++)
{
for (set<pair<int, Cutie> >::reverse_iterator it = maxim.rbegin(); it != maxim.rend(); it++)
{
if (intra(it->second, cutie[j]))
{
best[j] = it->first + 1;
}
}
maxim.insert(make_pair(best[j], cutie[j]));
}
int sol = 0;
for (int j = 0; j < n; j++)
if (sol < best[j])
sol = best[j];
printf("%d\n", sol + 1);
}
return 0;
}