Cod sursa(job #1490573)

Utilizator felixiPuscasu Felix felixi Data 23 septembrie 2015 20:04:44
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
using namespace std;

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

int N, Q;
int R[11][501][501], Log[501];

int main()
{
    in >> N >> Q;

    for (int i = 2; i <= N; ++i)
        Log[i] = Log[i/2] + 1;

    for (int i = 1; i <= N; ++i)
        for (int j = 1; j <= N; ++j)
            in >> R[0][i][j];

    for (int L = 1; (1 << L) <= N; ++L)
        for (int i = 1; i + (1 << L) - 1 <= N; ++i)
            for (int j = 1; j + (1 << L) - 1 <= N; ++j)
                R[L][i][j] = max(R[L - 1][i][j], R[L - 1][i + (1 << (L-1))][j]),

                R[L][i][j] = max(R[L][i][j], R[L - 1][i][j + (1 << (L-1))]),

                R[L][i][j] = max(R[L][i][j], R[L - 1][i + (1 << (L-1))][j + (1 << (L-1))]);

    for (int q = 1; q <= Q; ++q)
    {
        int i, j, k, L;
        in >> i >> j >> k;
        L = Log[k];
        out << max(max(R[L][i][j], R[L][i][j + k - (1 << L)]), max(R[L][i + k - (1 << L)][j], R[L][i + k - (1 << L)][j + k - (1 << L)])) << '\n';
    }

    return 0;
}