Cod sursa(job #2291287)

Utilizator andu23Macoveanu Andrei Gabriel andu23 Data 27 noiembrie 2018 20:49:16
Problema Plantatie Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>

using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int p[1000],d[501][501][18];
int i, n, m, t, a, b,l, j, x, y, xx, yy, k, maxi;


int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            fin>>d[i][j][0];
    for(i=2;i<=n;i++)
        p[i]=p[i/2]+1;
    for(t=1;t<=p[n];t++)
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            {
                l=(1<<(t-1));
                d[i][j][t]=d[i][j][t-1];
                if(i+l<=n)
                    d[i][j][t]=max(d[i][j][t], d[i+l][j][t-1]);
                if(j+l<=n)
                    d[i][j][t]=max(d[i][j][t], d[i][j+l][t-1]);
                if(i+l<=n&&j+l<=n)
                    d[i][j][t]=max(d[i][j][t], d[i+l][j+l][t-1]);

            }
    }
    for(i=1;i<=m;i++)
    {
        maxi=0;
        fin>>x>>y>>k;
        xx=x+k-1;
        yy=y+k-1;
        l=p[k];
        k=(1<<l);
        maxi=max(maxi, d[x][y][l]);
        maxi=max(maxi, d[xx-k+1][y][l]);
        maxi=max(maxi, d[x][yy-k+1][l]);
        maxi=max(maxi, d[xx-k+1][yy-k+1][l]);
        fout<<maxi<<"\n";
    }
    fin.close();
    fout.close();
    return 0;
}