Cod sursa(job #832299)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 10 decembrie 2012 12:19:39
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int x[555][555],w[10][555][555],l[555];

inline int maxim(int a,int b)
{
    return a<b? b:a;
}

int main()
{
    int n,m,i,j,k,p,lung,a,b,c;
    in>>n>>m;
    for(i=1;i<=n;++i)
    {
        for(j=1;j<=n;++j)
        {
            in>>x[i][j];
            w[0][i][j]=x[i][j];
        }
    }
    p=2;
    for(k=1;p<=n;++k)
    {
        for(i=1;i<=n-p+1;++i)
        {
            for(j=1;j<=n-p+1;++j)
            {
                w[k][i][j]=maxim(maxim(w[k-1][i][j],w[k-1][i][j+p/2]),maxim(w[k-1][i+p/2][j],w[k-1][i+p/2][j+p/2]));
            }
        }
        p*=2;
    }
    p=1;
    k=0;
    for(i=1;i<=n;++i)
    {
        if(2*p<=i)
        {
            p*=2;
            ++k;
        }
        l[i]=k;
    }
    for(i=1;i<=m;++i)
    {
        in>>a>>b>>c;
        lung=l[c];
        p=1<<lung;
        out<<maxim(maxim(w[lung][a][b],w[lung][a][b+c-p]),maxim(w[lung][a+c-p][b],w[lung][a+c-p][b+c-p]))<<"\n";
    }
    return 0;
}