Cod sursa(job #2752467)

Utilizator PaduraruCristianPaduraru Cristian Daniel PaduraruCristian Data 18 mai 2021 08:20:16
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("plantatie.in");
ofstream g("plantatie.out");

int n,m;

int squares[501][501][9];


void init()
{
    int i,j,k,p=2;

    for(i=1;i<=n;++i)
        for(j=1;j<=n;++j)
            f>>squares[i][j][0];

    ///init; split square in 4;
    for(k=1; k<9 && p<=n ; ++k,  p = p<<1)
    {
        for(i=1;i<=n-p+1; ++i)
            for(j=1; j<=n-p+1;++j)
            {
                squares[i][j][k] = max( max(squares[i][j][k-1], squares[i+(p>>1)][j][k-1] ), max( squares[i][j+(p>>1)][k-1], squares[i+(p>>1)][j+(p>>1)][k-1]));
            }
    }
}



int query(int i, int j, int k)
{
    int p=256, power=8; ///1<<8 ; n max = 500 < 1<<9

    while(p>k)
    {
        p = p>>1;
        --power;
    }

    if(p==k)
    {
        return squares[i][j][power];
    }
    else
        return max( max(squares[i][j][power], squares[i+k- p][j][power] ), max( squares[i][j+k-p][power], squares[i+k-p][j+k-p][power]));

}



int main()
{
    int i;
    int x,y,k;
    f>>n>>m;

    init();
    for(i=1;i<=n;++i)
    {
        for(int j=1;j<=n;++j)
            g<<squares[i][j][3]<<' ';
        g<<'\n';
    }


    for(i=1;i<=m;++i)
    {
        f>>x>>y>>k;
        g<<query(x,y,k)<<'\n';
    }

    return 0;
}