Cod sursa(job #2618939)

Utilizator STEFAN-ZOTAZota Stefan-Daniel STEFAN-ZOTA Data 26 mai 2020 16:54:05
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int log_table[501],a[501][501][10], i , j, n, m;

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

    log_table[1] = 0;
    for(int i = 2; i <= n; i++)
        log_table[i] = log_table[i/2] + 1;

    for(int putere = 1; putere <= log_table[n]; putere++) // incepem cu puterea 1 deoarece patrateputeree cu putere 2 puterea puterea 0 sunt insasi numereputeree
    {
        for(i = (1<<putere); i <= n; i++)
            for(j = (1<<putere); j <= n; j++)
                a[i][j][putere] = max({a[i][j][putere - 1], a[i - (1<<(putere - 1))][j][putere - 1], a[i - (1<<(putere - 1))][j - (1<<(putere - 1))][putere - 1], a[i][j - (1<<(putere - 1))][putere - 1]});
    }

    int l;
    for(int nr = 1; nr <= m; nr++)
    {
        cin>>i>>j>>l;
        i += l - 1;
        j += l - 1;
        int pow_max = log_table[l]; // la maxima a lui 2 mai mica sau egala cu lungimea laturii
        cout<<max( { a[i][j][pow_max], a[i-l+(1<<pow_max)][j][pow_max], a[i][j-l+(1<<pow_max)][pow_max], a[i-l+(1<<pow_max)][j-l+(1<<pow_max)][pow_max] } )<<"\n";
    }
    return 0;
}