Pagini recente » Cod sursa (job #1978599) | Cod sursa (job #209790) | Cod sursa (job #2750423) | Cod sursa (job #779379) | Cod sursa (job #329978)
Cod sursa(job #329978)
#include <algorithm>
#define DIM 3505
using namespace std;
struct cutie {int x,y,z;} a[DIM];
char buff[DIM];
int best[DIM],last[DIM];
int t,n,maxim,poz;
void citire (int &x)
{
for (x=0; buff[poz]<'0' || buff[poz]>'9'; )
if (++poz==DIM)
{
fread (buff,1,DIM,stdin);
poz=0;
}
for ( ; '0'<=buff[poz] && buff[poz]<='9'; )
{
x=x*10+buff[poz]-'0';
if (++poz==DIM)
{
fread (buff,1,DIM,stdin);
poz=0;
}
}
}
void read ()
{
int i;
for (i=1; i<=n; ++i)
{
citire (a[i].x);
citire (a[i].y);
citire (a[i].z);
}
}
int cmp (cutie a,cutie b)
{
return a.x<b.x || (a.x==b.x && a.y<b.y) || (a.x==b.x && a.y==b.y && a.z<b.z);
}
int max (int a,int b)
{
if (a>b)
return a;
return b;
}
void solve ()
{
int i,j,max_cur;
best[1]=last[1]=maxim=1;
for (i=2; i<=n; ++i)
{
for (max_cur=0, j=i-1; j>0; --j)
{
if (a[j].y<a[i].y && a[j].z<a[i].z)
max_cur=max (max_cur,last[j]);
if (best[j]<=max_cur)
break;
}
last[i]=max_cur+1;
best[i]=max (best[i-1],last[i]);
maxim=max (maxim,best[i]);
}
printf ("%d\n",maxim);
}
int main ()
{
freopen ("cutii.in","r",stdin);
freopen ("cutii.out","w",stdout);
int i;
citire (n);
citire (t);
for (i=1; i<=t; ++i)
{
read ();
sort (a+1,a+n+1,cmp);
solve ();
}
return 0;
}