Pagini recente » Cod sursa (job #2546762) | Cod sursa (job #2749682) | Cod sursa (job #1677989) | Cod sursa (job #1033287)
#include<cstdio>
#include<algorithm>
using namespace std;
const int NMAX = 3505;
int N,T,i,A,B,S,SOL,AIB[NMAX][NMAX];
struct Cutie {int X,Y,Z;} C[NMAX];
bool cmp(Cutie A,Cutie B) {return A.X<B.X;}
int Query(int A,int B)
{
int R=0;
for(int i=A;i;i-=i&(-i))
for(int j=B;j;j-=j&(-j))
R=max(R,AIB[i][j]);
return R;
}
void Update(int A,int B,int V)
{
for(int i=A;i<=N;i+=i&(-i))
for(int j=B;j<=N;j+=j&(-j))
AIB[i][j]=max(AIB[i][j],V);
}
void Clear(int A,int B)
{
for(int i=A;i<=N;i+=i&(-i))
for(int j=B;j<=N;j+=j&(-j))
AIB[i][j]=0;
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d",&N,&T);
for(;T;T--)
{
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); SOL=0;
for(i=1;i<=N;i++)
{
A=C[i].Y; B=C[i].Z;
S=Query(A-1,B-1)+1;
SOL=max(SOL,S);
Update(A,B,S);
}
for(i=1;i<=N;i++)
{
A=C[i].Y; B=C[i].Z;
Clear(A,B);
}
printf("%d\n",SOL);
}
return 0;
}