Pagini recente » Cod sursa (job #2467591) | Cod sursa (job #1179355) | Cod sursa (job #1685199) | Cod sursa (job #2918668) | Cod sursa (job #219148)
Cod sursa(job #219148)
# include <cstdio>
# include <algorithm>
using namespace std;
# define FIN "cutii.in"
# define FOUT "cutii.out"
# define max(a,b) (a > b ? a : b)
# define MAXN 3510
struct Box
{
int x,y,z;
} C[MAXN];
int N,T,i,j,k,rez,val;
int A[MAXN][MAXN];
int cmp(Box A, Box B)
{
return A.z < B.z;
}
void update(int l,int c)
{
int i,j;
for (i = l; i <= N; i += i^(i-1)&i)
for (j = c; j <= N; j += j^(j-1)&j)
A[i][j] = max(A[i][j],val);
}
void erase(int l,int c)
{
int i,j;
for (i = l; i <= N; i += i^(i-1)&i)
for (j = c; j <= N; j += j^(j-1)&j)
A[i][j] = 0;
}
void query(int l, int c)
{
int i,j;
for (i = l; i; i -= i^(i-1)&i)
for (j = c; j; j -= j^(j-1)&j)
val = max(val,A[i][j]);
}
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d%d",&N,&T);
for (k = 1; k <= T; ++k)
{
rez = 1;
for (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);
val = 1;
update(C[1].x,C[1].y);
for (i = 2; i <= N; ++i)
{
val = 0;
query(C[i].x-1,C[i].y-1);
val++;
update(C[i].x,C[i].y);
if (val > rez) rez = val;
}
for (i = 1; i <= N; ++i)
erase(C[i].x,C[i].y);
printf("%d\n",rez);
}
return 0;
}