Cod sursa(job #997650)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 14 septembrie 2013 17:58:00
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>

#define DN 555
#define prec_pow (1<<(pow-1))
using namespace std;


int dp[11][DN][DN],n,m;


void build()
{
    for(int pow=1;pow<=10;++pow)
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                   if( i + prec_pow <DN && j + prec_pow <DN)
                    dp[ pow ][ i ][ j ] = max ( dp[ pow-1 ][ i ][ j ]  , max ( dp[ pow-1 ][ i ] [ j + prec_pow ] ,
                                max ( dp[ pow-1 ][ i + prec_pow ] [ j ] , dp[ pow-1 ][ i + prec_pow ] [ j + prec_pow ] )));

}

int main()
{
    ifstream f("plantatie.in");
    ofstream g("plantatie.out");
    f>>n>>m;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            f>>dp[0][i][j];

    build();
    for(;m;--m)
    {
        int x,y,l,pow=0;
        f>>x>>y>>l;

        for(pow=0 ; (1<<pow) <=l ; ++pow);
        --pow;
        g<<max ( dp[pow][x][y], max ( dp[pow][x + l -(1<<pow) ][y] , max (  dp[pow][x][y + l -(1<<pow) ] , dp[pow][x + l -(1<<pow) ][y + l -(1<<pow) ]  )))<<"\n";
    }
    return 0;
}