Cod sursa(job #1927498)

Utilizator DawlauAndrei Blahovici Dawlau Data 15 martie 2017 09:34:19
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream>
#include<cmath>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int maxim(int a,int b)
{
    if(a>b)
        return a;
    return b;
}
const int NMAX=505,LOGNMAX=15;
int plant[NMAX][NMAX][LOGNMAX],q,i,j,k,n,a,b,c,d,x,y,r;
int main()
{
    fin>>n>>q;
    for(i=1;i<=n;++i)
        for(j=1;j<=n;++j)
            fin>>plant[i][j][0];
    for(k=1;(1<<k)<=n;++k)
        for(i=1;i<=n-(1<<k)+1;++i)
            for(j=1;j<=n-(1<<k)+1;++j)
            {
                a=plant[i][j][k-1];
                b=plant[i][j+(1<<(k-1))][k-1];
                c=plant[i+(1<<(k-1))][j][k-1];
                d=plant[i+(1<<(k-1))][j+(1<<(k-1))][k-1];
                plant[i][j][k]=maxim(a,maxim(b,maxim(c,d)));
            }
    while(q--)
    {
        fin>>x>>y>>r;
        k=log2(r);
        a=plant[x][y][k];
        b=plant[x][y+r-(1<<k)][k];
        c=plant[x+r-(1<<k)][y][k];
        d=plant[x+r-(1<<k)][y+r-(1<<k)][k];
        fout<<maxim(a,maxim(b,maxim(c,d)))<<'\n';
    }
}