Cod sursa(job #1685757)

Utilizator teodoramusatoiuTeodora Musatoiu teodoramusatoiu Data 11 aprilie 2016 20:44:49
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int N_max=505;
const int L=13;

int r[N_max][N_max][L], log[N_max];
int n,m;

int maxim ( int x, int y, int z, int t )
{
    if ( x >= y && x >= z && x >= y )
        return x;
    if ( y >= x && y >= z && y >= t )
        return y;
    if ( z >= x && z >= y && z >= t )
        return z;
    return t;
}

int minim(int a,int b)
{
    if(a<b)
        return a;
    else
        return b;
}

int main()
{
    in>>n>>m;
    int i,j,k,a,b,l,p,lin,col,rez, var;
    for ( i = 1; i <= n; i++ )
        for ( j = 1; j <= n; j++ )
            in >> r[i][j][0];

    log[1]=0;
    for(i=1; i<=n; i++)
        log[i]=1+log[i/2];

    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            for(k=1; (1<<k) <= i && (1<<k)<=j ; k++)
            {
                p = 1<<(k-1);
                r[i][j][k] = maxim( r[i][j][k-1], r[i-p][j][k-1], r[i][j-p][k-1], r[i-p][j-p][k-1] );
            }


    for(i=1; i<=m; i++)
    {
        in>>a>>b>>l;

        lin=a+l-1;
        col=b+l-1;
        p = log[l];
        var=1<<p;
        rez= maxim( r[lin][col][p], r[ lin+var ][col][p] , r[lin][col+var][p], r[a+var][b+var][p] );

        out<<rez<<'\n';

    }
    return 0;
}