Pagini recente » Cod sursa (job #2917805) | Cod sursa (job #1049848) | Cod sursa (job #235497) | Cod sursa (job #2375574) | Cod sursa (job #483522)
Cod sursa(job #483522)
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#define maxN 3505
using namespace std;
struct box {
int x, y, z;
} B[maxN];
int AIB[maxN][maxN], N, T;
inline bool cmp (const box &a, const box &b)
{
return a.z < b.z;
}
int query (int x, int y)
{
int S = 0, yy = y;
for (; x > 0; x -= (x & -x))
for (y = yy; y > 0; y -= (y & -y))
S = (S < AIB[x][y]) ? AIB[x][y] : S;
return S;
}
void update (int x, int y, int val)
{
int yy = y;
for (; x <= N; x += (x & -x))
for (y = yy; y <= N; y += (y & -y))
if (AIB[x][y] < val)
AIB[x][y] = val;
}
void erase (int x, int y)
{
int yy = y;
for (; x <= N; x += (x & -x))
for (y = yy; y <= N; y += (y & -y))
AIB[x][y] = 0;
}
int main ()
{
freopen ("cutii.in", "r", stdin);
freopen ("cutii.out", "w", stdout);
int i, mx, Mx;
scanf ("%d%d\n", &N, &T);
while (T--) {
for (i = 1; i <= N; i++)
scanf ("%d%d%d\n", &B[i].x, &B[i].y, &B[i].z);
sort (B + 1, B + N + 1, cmp);
Mx = 0;
for (i = 1; i <= N; i++) {
mx = query (B[i].x, B[i].y) + 1;
update (B[i].x, B[i].y, mx);
if (mx > Mx) Mx = mx;
}
printf ("%d\n", Mx);
for (i = 1; i <= N; i++)
erase (B[i].x, B[i].y);
}
return 0;
}