Pagini recente » Cod sursa (job #574790) | Cod sursa (job #628718) | Cod sursa (job #1753814) | Cod sursa (job #389819) | Cod sursa (job #93450)
Cod sursa(job #93450)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N_MAX 3501
struct cutie{
int x,y,z;
} A[N_MAX];
int N,T,V[N_MAX][N_MAX];
int cmp(const void *i, const void *j){
cutie *ei= (cutie *) i;
cutie *ej= (cutie *) j;
return ei->x - ej->x;
}
int bit (int x){
return (x&(x-1))^x;
}
int maxim(int x,int y){
int i,j,max=0;
for (i=x;i>0;i-=bit(i))
for (j=y;j>0;j-=bit(j))
if (V[i][j]>max)
max=V[i][j];
return max;
}
void adauga(int x, int y, int z){
int i,j,max;
max=maxim(x,y);
V[x][y]=++max;
for (i=x;i<=N;i+=bit(i))
for (j=y;j<=N;j+=bit(j)){
if (V[i][j]<max)
V[i][j]=max;
}
}
int main(){
int k,i,max,s;
FILE *fin=fopen("cutii.in","r");
FILE *fout=fopen("cutii.out","w");
fscanf(fin,"%d %d",&N,&T);
for (k=1;k<=T;k++){
for (i=0;i<N;i++)
fscanf(fin,"%d %d %d",&A[i].x,&A[i].y,&A[i].z);
qsort(A,N,sizeof(cutie),cmp);
max=0;
for (i=0;i<N;i++){
adauga(A[i].y,A[i].z,1);
s=maxim(A[i].y,A[i].z);
if (s>max)
max=s;
}
fprintf(fout,"%d\n",max);
memset(V,0,sizeof(V));
}
fclose(fin);
fclose(fout);
return 0;
}