Cod sursa(job #2287139)

Utilizator CryshanaGanea Carina Cryshana Data 21 noiembrie 2018 16:11:43
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

const int N = 502, L = 9;
int r[L][N][N], log[N];

int main ()
{
    int n, m;
    fin >> n >> m;
    for ( int i = 1; i <= n; i++ )
    {
        for ( int j = 1; j <= n; j++ )
        {
            fin >> r[0][i][j];
        }
    }
    for ( int i = 2; i <= n; i++ )
    {
        log[i] = log[i/2] + 1;
    }
    for ( int k = 1; k <= log[n]; k++ )
    {
        for ( int i = 1; i <= n - (1 << k) + 1; i++ )
        {
            for ( int j = 1; j <= n - (1 << k) + 1; j++ )
            {
                int a = max ( r[k-1][i + 1 << (k - 1)][j + 1 << ( k - 1)], r[k-1][ i + 1 << (k - 1)][j]);
                int b = max ( r[k-1][i][j + 1 << (k-1)], r[k-1][i][j]);
                r[k][i][j] = max ( a, b);
                //max ( r[k-1][i + 1 << (k - 1)][j + 1 << ( k - 1)], max ( r[k-1][ i + 1 << (k - 1)][j], max ( r[k-1][i][j+1 << (k-1)], r[k-1][i][j])));
            }
        }
    }
    for ( int q = 1; q <= m; q++ )
    {
        int i, j, k;
        fin >> i >> j >> k;
        int l = log[k-1];
        int a = max ( r[l][i][j], r[l][i + k - (1 << l)][j]);
        int b = max ( r[l][i + k - (1 << l)][j + k - (1 << l)], r[l][i][j + k - (1 << l)]);
        int rez = max ( a, b);
        //max ( r[l][i][j], max ( r[l][i + k - (1 << l) ][j], max ( r[l][i + k - ( 1 << l)][j + k - ( 1 << l)], r[l][i][j + k - ( 1 << l)])));
        fout << rez << "\n";
    }
    return 0;
}