Cod sursa(job #1680757)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 9 aprilie 2016 07:37:28
Problema Plantatie Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
#define nmax 505
#define logn 9
int r[nmax][nmax][logn],log[nmax];
int maxim(int a,int b){
    if(a>b)
        return a;
    return b;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("plantatie.in","r");
    fout=fopen("plantatie.out","w");
    int i,j,k,l,n,m,a,b,c,put,rasp;
    fscanf(fin,"%d%d",&n,&m);
    for(i=2;i<=n;i++)
        log[i]=1+log[i/2];
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++){
            fscanf(fin,"%d",&r[i][j][0]);
            for(k=1;(1<<k)<=i+j-maxim(i,j);k++){
                put=1<<(k-1);
                r[i][j][k]=maxim(r[i][j-put][k-1],r[i-put][j][k-1]);
                r[i][j][k]=maxim(r[i][j][k],r[i][j][k-1]);
                r[i][j][k]=maxim(r[i][j][k],r[i-put][j-put][k-1]);
            }
        }
    for(i=1;i<=m;i++){
        fscanf(fin,"%d%d%d",&a,&b,&c);
        l=log[c];
        rasp=maxim(r[a+c-1][b+c-1][l],r[a+(1<<l)-1][b+(1<<l)-1][l]);
        rasp=maxim(rasp,r[a+(1<<l)-1][b+c-1][l]);
        rasp=maxim(rasp,r[a+c-1][b+(1<<l)-1][l]);
        fprintf(fout,"%d\n",rasp);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}