Pagini recente » Cod sursa (job #3267982) | Cod sursa (job #2654861) | Cod sursa (job #1901551) | Cod sursa (job #2549695) | Cod sursa (job #23062)
Cod sursa(job #23062)
#include <stdio.h>
#define infile "cutii.in"
#define outfile "cutii.out"
#define NMAX 3500
struct point{short int x,y,z;};
FILE *fin,*fout;
int N;
point p[NMAX],aux[NMAX];
short int AIB[NMAX][NMAX];
void sortare()
{
for(int i=1;i<=N;i++)
p[aux[i].z]=aux[i];
}
inline int max(int x, int y)
{
return (x>y)?x:y;
}
void modificare(int val, int x, int y)
{
int oldy=y;
while(x<=N)
{
y=oldy;
while(y<=N)
{
AIB[x][y]=max(AIB[x][y],val);
y+=(y^(y&(y-1)));
}
x+=(x^(x&(x-1)));
}
}
int interogare(int x, int y)
{
int oldy=y,sol=0;
while(x>=1)
{
y=oldy;
while(y>=1)
{
sol=max(sol,AIB[x][y]);
y-=(y^(y&(y-1)));
}
x-=(x^(x&(x-1)));
}
return sol;
}
int solve()
{
int i,j;
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
AIB[i][j]=0;
for(i=1;i<=N;i++)
modificare(interogare(p[i].x,p[i].y)+1,p[i].x,p[i].y);
return interogare(N,N);
}
int main()
{
int i,t;
fin=fopen(infile,"r");
fout=fopen(outfile,"w");
fscanf(fin,"%d %d",&N,&t);
while(t)
{
for(i=1;i<=N;i++)
fscanf(fin,"%d %d %d",&aux[i].x,&aux[i].y,&aux[i].z);
sortare();
fprintf(fout,"%d\n",solve());
t--;
}
fclose(fin);
fclose(fout);
return 0;
}