Cod sursa(job #929122)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 26 martie 2013 20:56:27
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<fstream>

using namespace std;

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

int a[10][502][502], log[502], b[502][502], n, m;

int Querry(int i, int j, int k)
{
    int dis = log[k];
    return max(
           max( a[dis][i][j], a[dis][i + k - (1 << dis)][j + k - (1 << dis)]),
           max( a[dis][i][j + k - (1 << dis)], a[dis][i + k - (1 << dis)][j])
               );
}

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

    for(int i = 2; i <= n; ++i)
        log[i] = log[i >> 1] + 1;

    for(int k = 1; (1 << k) <= n; ++k)
        for(int i = n - 1 << k + 1; i > 0; --i)
            for(int j = n - 1 << k + 1; j > 0; --j)
                a[k][i][j] = max(
                             max( a[k - 1][i][j], a[k - 1][i][j + (1 << k) - 1]),
                             max( a[k - 1][i + (1 << k) - 1][j], a[k - 1][i + (1 << k) - 1][j + (1 << k) - 1])
                                 );

    int i, j, k;

    while(m--)
    {
        fin >> i >> j >> k;
        fout << Querry(i, j, k) << "\n";
    }

    fin.close(); fout.close();
    return 0;

}