Pagini recente » Cod sursa (job #2670541) | Cod sursa (job #731289) | Cod sursa (job #1126009) | Cod sursa (job #1285332) | Cod sursa (job #15069)
Cod sursa(job #15069)
#include <stdio.h>
#include <stdlib.h>
#define nmax 3501
typedef struct cutie
{
int a,b,c;
}cutie;
cutie a[nmax];
int v[nmax][nmax];
int n;
int compare(const void *x,const void *y)
{
return (*(cutie*)x).a-(*(cutie*)y).a;
}
int max(int x,int y)
{
int i,j,max=0;
for (i=x;i>=1;i=i-(i&(i^(i-1))))
for (j=y;j>=1;j=j-(j&(j^(j-1))))
if (v[i][j]>max)
max=v[i][j];
return max;
}
void add(int x,int y)
{
int i,j;
for (i=x;i<=n;i=i+(i&(i^(i-1))))
for (j=y;j<=n;j=j+(j&(j^(j-1))))
if (v[x][y]>v[i][j])
v[i][j]=v[x][y];
}
FILE *f,*g;
int main()
{
int t,i,j,l;
f=fopen("cutii.in","rt");
g=fopen("cutii.out","wt");
fscanf(f,"%d %d",&n,&t);
for (l=1;l<=t;l++)
{
for (i=1;i<=n;i++)
fscanf(f,"%d %d %d",&a[i].a,&a[i].b,&a[i].c);
qsort(a+1,n,sizeof(cutie),compare);
for (i=1;i<=n;i++)
{
v[a[i].b][a[i].c]=max(a[i].b-1,a[i].c-1)+1;
add(a[i].b,a[i].c);
}
fprintf(g,"%d\n",max(n,n));
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
v[i][j]=0;
}
fclose(f);
fclose(g);
return 0;
}