Cod sursa(job #1543529)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 6 decembrie 2015 11:11:09
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#define FOR(a,b,c) for(int a=b; a<=c; ++a)
#define max(a,b) (a>b?a:b)
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n, m, a[510][510][10][10], i, j, x, y, z;
int main(){
    f>>n>>m;
    FOR(i,1,n)
        FOR(j,1,n)
            f>>a[i][j][0][0];
    z=0;
    while( (1<<z++)<=n );
    z-=2;
    FOR(i,0,z)
    {
        if(i!=0)
            FOR(x,1,n)
                FOR(y,1,n)
                    a[x][y][i][0]=max(a[x][y][i-1][0], a[x+( 1<<(i-1) ) ][y][i-1][0]);
        FOR(j,1,z)
            FOR(x,1,n)
                FOR(y,1,n)
                    a[x][y][i][j]=max(a[x][y][i][j-1], a[x][y+( 1<<(j-1) )][i][j-1]);
    }
    FOR(i,0,z)
        FOR(j,0,z)
        {
            g<<i<<' '<<j<<"\n";
            FOR(x,1,n)
            {
                FOR(y,1,n)
                    g<<a[x][y][i][j]<<' ';
                g<<"\n";
            }
            g<<"\n";
        }
    FOR(intrebari,1,m)
    {
        f>>x>>y>>z;
        int i=0;
        while( (1<<i++)<=z );
        i-=2;
        g<<max(a[x][y][i][i], a[x+z-(1<<i)][y+z-(1<<i)][i][i])<<"\n";
    }
    return 0;
}