Pagini recente » Cod sursa (job #2325545) | Cod sursa (job #241748) | Cod sursa (job #681187) | Cod sursa (job #1574884) | Cod sursa (job #1225554)
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define nmax 3510
int N, T, D[nmax], AIB[nmax][nmax], rs;
struct cutie
{
int x, y, z;
};
bool cmp(cutie a, cutie b) {
return (a.z < b.z);
}
cutie C[nmax];
int Max (int x, int y)
{
int Mx = 0;
for (;x; x -= (x & -x))
for (int y1 = y; y1; y1 -= (y1 & -y1))
Mx = max(Mx, AIB[x][y1]);
return Mx;
}
void update(int x, int y, int val)
{
for (;x <= N; x += (x & -x))
for (int y1 = y; y1 <= N; y1 += (y1 & -y1) )
if (AIB[x][y1] < val) AIB[x][y1] = val;
}
int main()
{
freopen("cutii.in","r", stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d", &N, &T);
while (T -- ) {
rs = 1;
memset(AIB, 0, sizeof(AIB));
for (int i = 1; i <= N; i++)
scanf("%d%d%d", &C[i].x, &C[i].y, &C[i].z);
sort(C + 1, C + N + 1, cmp);
for (int i = 1; i <= N; i++) {
D[i] = Max(C[i].x-1, C[i].y-1) + 1;
update(C[i].x, C[i].y, D[i]);
rs = max(rs, D[i]);
}
printf("%d\n", rs);
}
return 0;
}