Pagini recente » Cod sursa (job #2104564) | Cod sursa (job #96129) | Cod sursa (job #696076) | Autentificare | Cod sursa (job #805536)
Cod sursa(job #805536)
#include <iostream>
#include <fstream>
#include <algorithm>
#define MAXN 3510
using namespace std;
struct mys
{
int x, y, z;
};
int N, T, sol[MAXN];
mys v[MAXN];
int aib[MAXN][MAXN];
ifstream fin("cutii.in");
ofstream fout("cutii.out");
inline void update(int X, int Y, int val)
{
for (int i = X; i <= N; i = (i | (i - 1)) + 1)
{
for (int j = Y; j <= N; j = (j | (j - 1)) + 1)
{
if (aib[i][j] < val)
{
aib[i][j] = val;
}
else
if (val == -1)
{
aib[i][j] = 0;
}
}
}
}
inline int query(int X, int Y)
{
int ret = 0;
for (int i = X - 1; i >= 1; i = i & (i - 1))
{
for (int j = Y - 1; j >= 1; j = j & (j - 1))
{
if (ret < aib[i][j])
{
ret = aib[i][j];
}
}
}
return ret;
}
struct cmp
{
bool operator()(const mys &a, const mys &b) const
{
return a.z < b.z;
}
};
int solve()
{
int ret = 0;
for (int i = 1; i <= N; ++i)
{
fin >> v[i].x >> v[i].y >> v[i].z;
sol[i] = 0;
}
sort(v + 1, v + N + 1, cmp());
for (int i = 1; i <= N; ++i)
{
int val = query(v[i].x, v[i].y);
update(v[i].x, v[i].y, val + 1);
if (ret < val + 1) ret = val + 1;
}
for (int i = 1; i <= N; ++i)
{
update(v[i].x, v[i].y, -1);
}
return ret;
}
int main()
{
fin >> N >> T;
for (; T; T--)
{
fout << solve() << '\n';
}
}