Pagini recente » Rezultatele filtrării | Rezultatele filtrării | Rezultatele filtrării | Borderou de evaluare (job #654014) | Cod sursa (job #202908)
Cod sursa(job #202908)
# include <stdio.h>
# include <algorithm>
using namespace std;
# define FIN "cutii.in"
# define FOUT "cutii.out"
# define MAXN 3502
struct trio
{
int x,y,z;
};
int N,i,j,L,p,T;
int Best[MAXN];
int V[MAXN];
trio C[MAXN];
int cmp(trio a, trio b)
{
return a.x<b.y;
}
int search(int st, int dr, int p)
{
int mij,poz;
while (st <= dr)
{
mij = (st+dr) >> 1;
if (C[V[mij]].x<C[p].x&&C[V[mij]].y<C[p].y&&C[V[mij]].z<C[p].z)
{
poz = mij;
st = mij + 1;
}
else dr = mij - 1;
}
return poz;
}
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d %d",&N,&T);
for (j = 1; j <= T; ++j)
{
for (i = 1; i <= N; ++i)
scanf("%d%d%d",&C[i].x,&C[i].y,&C[i].z);
sort(C+1,C+N+1,cmp);
Best[1] = 1;
V[1] = 1;
L = 1;
for (i = 2; i <= N; ++i)
{
p = search(0,L,i);
Best[i] = p + 1;
V[p+1] = i;
if (p+1 > L) L = p+1;
}
p = 0;
for (i = 1; i <= N; ++i)
if (Best[i]>p) p = Best[i];
printf("%d\n",p);
}
return 0;
}