Cod sursa(job #2066889)

Utilizator alextodoranTodoran Alexandru Raul alextodoran Data 15 noiembrie 2017 17:38:36
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
#define INF 1000000002
using namespace std;

int n, m, ma[502][502], dp[10][502][502], i, j, q, a, b, l, k, p2;

int main()
{
    ifstream fin ("plantatie.in");
    ofstream fout ("plantatie.out");
    fin >> n >> m;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
            fin >> ma[i][j];
    for(k = 0; (1 << k) <= n; k++)
    {
        for(i = 1; i <= n - (1 << k) + 1; i++)
        {
            for(j = 1; j <= n - (1 << k) + 1; j++)
            {
                if(k == 0)
                    dp[k][i][j] = ma[i][j];
                else
                    dp[k][i][j] = max(max(dp[k - 1][i][j], dp[k - 1][i + (1 << (k - 1))][j]), max(dp[k - 1][i + (1 << (k - 1))][j + (1 << (k - 1))], dp[k - 1][i][j + (1 << (k - 1))]));
            }
        }
    }
    for(q = 1; q <= m; q++)
    {
        fin >> a >> b >> l;
        k = 0;
        p2 = 1;
        while(p2 * 2 <= l)
        {
            k++;
            p2 *= 2;
        }
        fout << max(max(dp[k][a][b], dp[k][a + l - p2][b]), max(dp[k][a + l - p2][b + l - p2], dp[k][a][b + l - p2])) << "\n";
    }
    return 0;
}