Cod sursa(job #2269403)

Utilizator DovlecelBostan Andrei Dovlecel Data 25 octombrie 2018 22:22:53
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>

using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");

const int N=501;
const int L=9;
int r[L][N][N],log2[N],n,m;

int main()
{
    in>>n>>m;
    for(int i=2;i<=n;i++)
        log2[i]=1+log2[i/2];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            in>>r[0][i][j];
    int l,mic,x,y;
    for(int k=1;k<=log2[n];k++)
    {
        l=n-(1<<k)+1;
        mic=1<<(k-1);
        for(int i=1;i<=l;i++)
            for(int j=1;j<=l;j++)
            {
                x=max(r[k-1][i][j],r[k-1][i+mic][j+mic]);
                y=max(r[k-1][i+mic][j],r[k-1][i][j+mic]);
                r[k][i][j]=max(x,y);
            }
    }
    int i,j,k;
    for(int l=0;l<m;l++)
    {
        in>>i>>j>>mic;
        k=log2[mic-1];
        mic=mic-(1<<k);
        x=max(r[k][i][j],r[k][i+mic][j+mic]);
        /*out<<'('<<k<<','<<i<<','<<j<<')'<<'\n';
        out<<'('<<k<<','<<i+mic<<','<<j+mic<<')'<<'\n';*/
        y=max(r[k][i+mic][j],r[k][i][j+mic]);
        /*out<<'('<<k<<','<<i+mic<<','<<j<<')'<<'\n';
        out<<'('<<k<<','<<i<<','<<j+mic<<')'<<'\n';*/
        out<<max(x,y)<<'\n';
    }
    return 0;
}