Pagini recente » Cod sursa (job #3237255) | Cod sursa (job #1545150) | Cod sursa (job #1468079) | Cod sursa (job #1668744) | Cod sursa (job #1264631)
#include<cstdio>
#include<algorithm>
using namespace std;
const int nmax = 3500;
int sol,n,aib[nmax+1][nmax+1];
struct cutii
{
int x,y,z;
}v[nmax+1];
bool cmp(cutii a,cutii b)
{
return (a.x<b.x);
}
inline int max(int a,int b)
{
if (a<b)
return b;
else
return a;
}
inline int lsb(int x)
{
return x&-x;
}
void init()
{
for(int k=0;k<n;++k)
for(int i=v[k].y;i<=n;i+=lsb(i))
for(int j=v[k].z;j<=n;j+=lsb(j))
aib[i][j]=0;
}
int query(int y,int z)
{
int ans=0;
for(int i=y-1;i>0;i-=lsb(i))
for(int j=z-1;j>0;j-=lsb(j))
ans=max(ans,aib[i][j]);
return ans;
}
void update(int y,int z,int val)
{
for(int i=y;i<=n;i+=lsb(i))
for(int j=z;j<=n;j+=lsb(j))
aib[i][j]=max(aib[i][j],val);
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
int t,k;
scanf("%d%d",&n,&t);
while(t--)
{
for(int i=0;i<n;++i)
scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].z);
sort(v,v+n,cmp);
sol=0;
for(int i=0;i<n;++i)
{
k=query(v[i].y,v[i].z)+1;
sol=max(sol,k);
update(v[i].y,v[i].z,k);
}
printf("%d\n",sol);
init();
}
return 0;
}