Pagini recente » Cod sursa (job #1216831) | Cod sursa (job #2846567) | Cod sursa (job #2858247) | Cod sursa (job #2929024) | Cod sursa (job #23675)
Cod sursa(job #23675)
#include <stdio.h>
#include <stdlib.h>
FILE *fin,*fout;
#define nmax 3505
typedef struct cutie
{
int x,y,z;
}cutie;
cutie h[nmax];
int n,t;
int comp(const void *a,const void *b)
{
return (*(cutie*)a).x-(*(cutie*)b).x;
}
int m[nmax][nmax],p2[nmax];
int pow2(int x)
{
int p=1;
while (x%2==0)
{
p*=2;
x/=2;
}
return p;
}
void make_0(int x,int y)
{
int ix,iy;
for (ix=x;ix<=n;ix+=p2[ix])
for (iy=y;iy<=n;iy+=p2[iy]) m[ix][iy]=0;
}
int maxim(int x,int y)
{
if (x>y) return x;
else return y;
}
void maximizeaza(int x,int y)
{
int ix,iy;
for (ix=x;ix<=n;ix+=p2[ix])
for (iy=y;iy<=n;iy+=p2[iy]) m[ix][iy]=maxim(m[ix][iy],m[x][y]);
}
int det_max(int x,int y)
{
int ix,iy,ma=0;
if ((x>0)||(y>0))
{
for (ix=x;ix>0;ix-=p2[ix]) ma=maxim(ma,m[ix][y]);
for (iy=y;iy>0;iy-=p2[iy]) ma=maxim(ma,m[x][iy]);
ma=maxim(ma,det_max(x-p2[x],y-p2[y]));
return ma;
}
else return 0;
}
int main()
{
int i,j,max;
fin=fopen("cutii.in","rt");
fout=fopen("cutii.out","wt");
fscanf(fin,"%d %d",&n,&t);
for (i=1;i<=n;i++) p2[i]=pow2(i);
while (t)
{
for (i=0;i<n;i++) fscanf(fin,"%d %d %d",&h[i].x,&h[i].y,&h[i].z);
qsort(h,n,sizeof(h[0]),comp);
max=0;
for (i=0;i<n;i++)
{
m[h[i].y][h[i].z]=det_max(h[i].y,h[i].z)+1;
maximizeaza(h[i].y,h[i].z);
if (m[h[i].y][h[i].z]>max) max=m[h[i].y][h[i].z];
}
fprintf(fout,"%d\n",max);
for (i=0;i<n;i++) make_0(h[i].y,h[i].z);
t--;
}
fclose(fin);
fclose(fout);
return 0;
}