Pagini recente » Cod sursa (job #2676560) | Cod sursa (job #1920116) | Cod sursa (job #6962) | Cod sursa (job #542581) | Cod sursa (job #1814973)
#include<cstdio>
#include<algorithm>
using namespace std;
int n,t;
int aib[3510][3510],d[3510];
struct cutie
{
int x;
int y;
int z;
} v[3150];
bool cmp(cutie a,cutie b)
{
return a.x<b.x;
}
void aib_update(int x,int y,int value)
{
for(int i=x; i<=n; i+=i&(-i))
for(int j=y; j<=n; j+=j&(-j)) if(aib[i][j]<value) aib[i][j]=value;
}
int aib_query(int x,int y)
{
int s=0;
for(int i=x; i>=1; i-=i&(-i))
for(int j=y; j>=1; j-=j&(-j)) if(s<aib[i][j]) s=aib[i][j];
return s;
}
void aib_reset(int x,int y)
{
for(int i=x; i<=n; i+=i&(-i))
for(int j=y; 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--)
{
int sol=0;
for(int i=1; i<=n; i++) scanf("%d %d %d",&v[i].x,&v[i].y,&v[i].z);
sort(v+1,v+n+1,cmp);
for(int i=1; i<=n; i++)
{
d[i]=aib_query(v[i].y-1,v[i].z-1)+1;
aib_update(v[i].y,v[i].z,d[i]);
}
for(int i=1; i<=n; i++) sol=max(sol,d[i]);
printf("%d\n",sol);
for(int i=1; i<=n; i++)aib_reset(v[i].y,v[i].z);
}
}