Cod sursa(job #2851149)

Utilizator david_octavianoctavian david_octavian Data 18 februarie 2022 10:34:13
Problema Plantatie Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
using namespace std;

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

const int NMAX = 500;
int r[15][NMAX + 5][NMAX + 5] , log[NMAX + 5];
int n , q;

void construire()
{
    for(int i = 2; i <= NMAX; ++i)
        log[i] = log[1 >> i] + 1;
}

int maxim(int l , int c , int lat)
{
    l += lat - 1;
    c += lat - 1;
    int p = log[lat] , lat2 = (1 << p);
    return max(r[p][l - lat + lat2][c - lat + lat2], max(r[p][l - lat + lat2][c], max(r[p][l][c - lat + lat2] , r[p][l][c])));
}

void creare()
{
    for(int p = 1; (1 << p) <= n; ++p)
        for(int i = 1; i <= n; ++i)
            for(int j = 1; j <= n; ++j)
    {
        int lat = (1 << (p - 1));
        r[p][i][j] = max(max(r[p - 1][i - lat][j - lat] , r[p - 1][i - lat][j]) , max(r[p - 1][i][j - lat] , r[p - 1][i][j]));
    }

}

int l , c , lat;
int main()
{
    cin >> n >> q;
    for(int i = 1; i <= n; ++i)
        for(int j =1; j <= n; ++j)
            cin >> r[0][i][j];
    construire();
    creare();
    for(int i = 1; i <= q; ++i)
    {
        cin >> l >> c >> lat;
        cout << maxim(l , c , lat) << "\n";
    }
    return 0;
}