Pagini recente » N-ai valoarea mea | Monitorul de evaluare | Profil Wordmeister | Monitorul de evaluare | Cod sursa (job #2013067)
#include <cstdio>
#include <algorithm>
#define INF 2000000000
using namespace std;
struct cutii
{
int x,y,z;
}v[3501];
int rez[3501];
bool comp(cutii a,cutii b)
{
if(a.x==b.x)
if(a.y==b.y)
return a.z<b.z;
else
return a.y<b.y;
else
return a.x<b.x;
}
int cb(int n,int ct,int restr)
{
int pas=1<<15;
while(pas)
{
if(ct+pas<=n)
{
switch(restr)
{
case 0: if(v[ct+pas].x<v[n].x)
ct+=pas;
break;
case 1: if(v[ct+pas].y<v[n].y)
ct+=pas;
break;
case 2: if(v[ct+pas].z<v[n].z)
ct+=pas;
break;
}
}
pas/=2;
}
return ct;
}
int main()
{
int n,t,k,i,a,b,c,nr;
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d",&n,&t);
for(k=1; k<=t; k++)
{
for(i=1; i<=n; i++)
scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].z);
sort(v+1,v+1+n,comp);
for(i=1; i<=n; i++)
{
a=cb(i,0,0);
a=cb(a,0,0);
b=cb(i,a,1);
b=cb(b,a,1);
c=cb(i,b,2);
rez[i]=rez[c]+1;
}
nr=0;
for(i=1; i<=n; i++)
{
if(rez[i]>nr)
nr=rez[i];
rez[i]=0;
}
printf("%d\n",nr);
}
return 0;
}