Cod sursa(job #1937444)

Utilizator TimoteiCopaciu Timotei Timotei Data 23 martie 2017 22:58:47
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>

using namespace std;
ofstream fout("plantatie.out");

int n, m, M[505][505][11];
void set_values()
{
    int i1, j1;
    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){
           i1 = i + (1 << (k - 1));
           j1 = j + (1 << (k - 1));
           M[i][j][k] = max(max(M[i][j][k - 1], M[i][j1][k - 1]), max(M[i1][j][k - 1], M[i1][j1][k - 1]));
        }
}
void read()
{
    ifstream fin("plantatie.in");
    fin >> n >> m;
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= n; ++j)
        fin >> M[i][j][0];
    set_values();
    int x1, y1, x, y, l;
    for(int i = 1; i <= m; ++i){
        fin >> x >> y >> l;
        int k;
        for(k = 0; (1 << k) <= l; ++k);
        k--;
        x1 = x + l - (1 << k);
        y1 = y + l - (1 << k);
        fout << max(max(M[x][y][k], M[x][y1][k]), max(M[x1][y][k], M[x1][y1][k])) << '\n';
    }
}
int main()
{
    read();
    return 0;
}