Cod sursa(job #123800)

Utilizator DastasIonescu Vlad Dastas Data 17 ianuarie 2008 13:50:47
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <algorithm>

const int maxn = 501;
const int maxm = 75001;

FILE *in = fopen("plantatie.in","r"), *out = fopen("plantatie.out","w");

int n, m;
int a[maxn][maxn];

int b[maxn][maxn][maxn];

void read()
{
    fscanf(in, "%d %d", &n, &m);

    for ( int i = 1; i <= n; ++i )
        for ( int j = 1; j <= n; ++j )
            fscanf(in, "%d", &a[i][j]);
}

int h[4];
int max(int x, int y, int p, int q)
{
    h[0] = x, h[1] = y, h[2] = p, h[3] = q;

    std::sort(h, h+4);

    return h[3];
}

void prec()
{
    for ( int i = 1; i <= n; ++i )
        for ( int j = 1; j <= n; ++j )
            b[i][j][1] = a[i][j];

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

int main()
{
    read();
    prec();

    int x, y, z;

    for ( int i = 1; i <= m; ++i )
    {
        fscanf(in, "%d %d %d", &x, &y, &z);
        fprintf(out, "%d\n", b[x][y][z]);
    }


	return 0;
}