Pagini recente » Cod sursa (job #156375) | Cod sursa (job #2425707) | Cod sursa (job #1497689) | Cod sursa (job #249942) | Cod sursa (job #1333708)
#include<cstdio>
#include<vector>
#define NMAX 5000
#define LSB(x) (x&(-x))
#define max(a,b) (a>b?a:b)
using namespace std;
int i,j,n,k,Max,sol,x,y,z,t;
int AIB[3505][3505];
struct cub
{
int l,r;
};
cub v[3505];
cub mp(int a,int b)
{
cub X;X.l=a;X.r=b;
return X;
}
int query(int st,int dr)
{
int i,j;
for (i=st;i>0;i-=(i&(-i)))
for (j=dr;j>0;j-=(j&(-j)))
Max=max(Max,AIB[i][j]);
return Max;
}
void update(int st,int dr,int val)
{
int i,j;
for (i=st;i<=n;i+=LSB(i))
for (j=dr;j<=n;j+=LSB(j))
AIB[i][j]=max(val,AIB[i][j]);
}
void init()
{
for (i=1;i<=n;++i)
for (j=v[i].l;j<=n;j+=LSB(j))
for (k=v[i].r;k<=n;k+=LSB(k)) AIB[j][k]=0;
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d",&n,&t);
while(t>0)
{
--t;
for (i=1;i<=n;++i)
{
scanf("%d%d%d",&x,&y,&z);
v[z]=mp(x,y);
}
sol=0;
for (i=1;i<=n;++i)
{
Max=0;
Max=query(v[i].l-1,v[i].r-1);
update(v[i].l,v[i].r,Max+1);
if (Max+1>sol) sol=Max+1;
}
printf("%d\n",sol);
init();
}
return 0;
}