Cod sursa(job #2625898)

Utilizator CoakazeRotaru Catalin Coakaze Data 6 iunie 2020 10:47:51
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
using namespace std;

int p[25],lg[610];
int D[12][510][510];
int n, m, a, b, k;

int main()
{
    ifstream f("plantatie.in");
    ofstream g("plantatie.out");
    f>>n>>m;
    int i, j;
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            f>>D[0][i][j];
    p[0] = 1;
    for(int i=1; p[i-1]<=n; i++)
        p[i] = p[i-1] * 2;
    for(int k=1; p[k]<=n; k++)
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
            {
                if(i + p[k] <= n + 1 && j + p[k] <= n + 1)
                {
                    D[k][i][j] = max(D[k-1][i][j],max(D[k-1][i][j+p[k-1]],max(D[k-1][i+p[k-1]][j],D[k-1][i+p[k-1]][j+p[k-1]])));
                }
            }
    lg[1] = 0;
    for(int i=2; i<600; i++)
        lg[i] = lg[i/2]+1;
    for(i=1; i<=m; i++)
    {
        f>>a>>b>>k;
        cout<<max(D[lg[k]][a][b],max(D[lg[k]][a][b+(k-p[lg[k]])],max(D[lg[k]][a+(k-p[lg[k]])][b],D[lg[k]][a+(k-p[lg[k]])][b+(k-p[lg[k]])])))<<"\n";
    }
    return 0;
}