Pagini recente » Cod sursa (job #1127470) | Cod sursa (job #2956457) | Cod sursa (job #2192496) | Cod sursa (job #1168230) | Cod sursa (job #290125)
Cod sursa(job #290125)
using namespace std;
#include<cstdio>
#include<cstdlib>
#define nmax 3501
int n,T,arb[nmax][nmax],dp[nmax];
struct cutie { int x,y,z;};
cutie v[nmax];
int maxim(int a,int b){if(a>b) return a;return b;}
void zero(int px,int py)
{
if(arb[px][py])
{
for(int i=px;i<=n;i+=i & -i)
for(int j=py;j<=n;j+=j &-j)
arb[i][j]=0;
}
}
void update(int px,int py,int val)
{
int i,j;
for(i=px;i<=n;i+=i &-i)
for(j=py;j<=n;j+=j & -j)
arb[i][j]= maxim( arb[i][j],val);
}
int query(int px,int py)
{
int max=0,i,j;
for(i=px;i;i-= i &-i)
for(j=py;j;j-=j & -j)
if(max<arb[i][j]) max=arb[i][j];
return max;
}
int cmp( cutie* a, cutie * b)
{
return a->x-b->x;
}
int main()
{
int i,j,max ;
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d",&n,&T);
for(j=0;j<T;j++)
{
for(i=1;i<=n;i++)
zero(v[i].y,v[i].z);
for(i=0;i<n;i++)
scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].z);
qsort(v,n,sizeof(cutie),(int(*)(const void *,const void *))cmp);
dp[0]=1;
update(v[0].y,v[0].z,1);
for(i=1;i<n;i++)
{
dp[i]=1+query(v[i].y,v[i].z);
update(v[i].y,v[i].z,dp[i]);
}
max=0;
for(i=0;i<n;i++)
if(dp[i]>max) max=dp[i];
printf("%d\n",max);
}
return 0;
}