Cod sursa(job #1280622)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 2 decembrie 2014 11:23:57
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<cstdio>
int n,m,i,j,a,ii,l,k,il,jl,p[510],x[11][510][510];
FILE *f,*g;
int maxim(int a,int b){
    if(a>b)
        return a;
    return b;
}
int main(){
    f=fopen("plantatie.in","r");
    g=fopen("plantatie.out","w");
    fscanf(f,"%d%d",&n,&m);
    p[1]=0;
    for(i=1;i<=509;i++){
        p[i]=p[i/2]+1;
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            fscanf(f,"%d",&x[0][i][j]);
        }
    }
    for(i=1;i<=p[n];i++){
        a=1<<(i-1);
        for(j=1;j<=n;j++){
            for(ii=1;ii<=n;ii++){
                x[i][j][ii]=maxim( x[i-1][j][ii], maxim( x[i-1][j][ii+a], maxim( x[i-1][j+a][ii], x[i-1][j+a][ii+a] ) ) );
            }
        }
    }
    /*for(i=1;i<=p[n];i++){
        for(j=1;j<=n;j++){
            for(ii=1;ii<=n;ii++){
                fprintf(g,"%d ",x[i][j][ii]);
            }
            fprintf(g,"\n");
        }
        fprintf(g,"\n");
    }*/
    for(l=1;l<=m;i++){
        fscanf(f,"%d%d%d",&i,&j,&k);
        a=p[k];
        ii=(1<<a);
        il=maxim(0,i-ii);
        jl=maxim(0,j-ii);
        int s=maxim( x[a][i][j], maxim( x[a][i][jl], maxim( x[a][il][j], x[a][il][jl] ) ) );
        fprintf(g,"%d\n",s);
    }


    fclose(f);
    fclose(g);
    return 0;
}