Pagini recente » Cod sursa (job #2715077) | Cod sursa (job #3252193) | Cod sursa (job #729441) | Cod sursa (job #339127) | Cod sursa (job #1096573)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int NMAX = 3500+5;
struct Box
{
int x,y,z;
bool operator()(Box A,Box B)
{
return A.x<B.x;
}
};
int N,T,Sol;
Box V[NMAX];
int AIB[NMAX][NMAX];
int Query(int x,int y)
{
int i,j,ans=0;
for(i=x; i; i-=i&(-i))
for(j=y; j; j-=j&(-j))
ans=max(ans,AIB[i][j]);
return ans;
}
void Update(int x,int y,int w)
{
int i,j;
for(i=x; i; i-=i&(-i))
for(j=y; j; j-=j&(-j))
AIB[i][j]=max(w,AIB[i][j]);
}
void Clear(int x,int y)
{
int i,j;
for(i=x; i; i-=i&(-i))
for(j=y; j; j-=j&(-j))
AIB[i][j]=0;
}
int main()
{
int i,x;
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d",&N,&T);
for(; T; --T)
{
Sol=0;
for(i=1; i<=N; i++)
scanf("%d%d%d",&V[i].x,&V[i].y,&V[i].z);
sort(V+1,V+N+1,Box());
for(i=1; i<=N; i++)
{
x=Query(V[i].y-1,V[i].z-1)+1;
Update(V[i].y,V[i].z,x);
Sol=max(Sol,x);
}
printf("%d\n",Sol);
for(i=1; i<=N; i++)
Clear(V[i].y,V[i].z);
}
return 0;
}