Cod sursa(job #1993761)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 23 iunie 2017 18:13:53
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int n,m,mat[10][501][501],p[10],aux[501],i,j,maxim,k,h,a,b,alfa;
int main(){
    in >> n >> m;
    for( i = 1; i <= n; i ++ ){
        for ( j = 1; j <= n; j ++ ){
            in >> mat[0][i][j];
        }
    }
    p[0] = 1;
    for( i = 1; i <= 9; i ++ ){
        p[i] = p[i-1]*2;
    }
    for( i = 2; i <= n; i ++ ){
        aux[i] = aux[i/2]+1;
    }
    for( k = 1; k <= 8; k ++ ){
        for( i = 1; i <= n-p[k]+1; i ++ ){
            for( j = 1; j <= n-p[k]+1; j ++ ){
                mat[k][i][j] = max( max(mat[k-1][i][j], mat[k-1][i+p[k-1]][j]), max(mat[k-1][i][j + p[k-1]], mat[k-1][i+p[k-1]][j+p[k-1]]));
            }
        }
    }
    for( h = 1; h <= m; h ++ ){
        in >> a >> b >> k;
        alfa = aux[k];
        maxim = max( max( mat[alfa][a][b] , mat[alfa][ a ][ b  + k - p[alfa]]  )
                   , max( mat[alfa][ a + k - p[alfa] ][ b ] , mat[alfa][ a + k - p[alfa] ][ b + k - p[alfa] ]) );
        out<<maxim<<"\n";
    }
    return 0;
}