Cod sursa(job #1889543)

Utilizator Athena99Anghel Anca Athena99 Data 22 februarie 2017 19:25:54
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>

using namespace std;

ifstream fin("plantatie.in");
ofstream fout("plantatie.out");

const int nmax= 500;
const int logmax= 9;

int d[logmax+1][nmax+1][nmax+1];

int main(  ) {
    int n, m;
    fin>>n>>m;
    for ( int i= 1; i<=n; ++i ) {
        for ( int j= 1; j<=n; ++j ) {
            fin>>d[0][i][j];
        }
    }

    for ( int k= 1; (1<<k)<=n; ++k ) {
        for ( int i= 1; i+(1<<k)-1<=n; ++i ) {
            for ( int j= 1; j+(1<<k)-1<=n; ++j ) {
                d[k][i][j]= max(max(d[k-1][i][j], d[k-1][i+(1<<(k-1))][j]), max(d[k-1][i][j+(1<<(k-1))], d[k-1][i+(1<<(k-1))][j+(1<<(k-1))]));
            }
        }
    }

    for ( int cnt= 1, i, j, k, p2; cnt<=m; ++cnt ) {
        fin>>i>>j>>k;
        for ( p2= 0; (1<<(p2+1))<=k; ++p2 ) ;

        int sol= max(max(d[p2][i][j], d[p2][i+k-(1<<p2)][j]), max(d[p2][i][j+k-(1<<p2)], d[p2][i+k-(1<<p2)][j+k-(1<<p2)]));
        fout<<sol<<"\n";
    }

    return 0;
}