Cod sursa(job #1923530)

Utilizator raulmuresanRaul Muresan raulmuresan Data 11 martie 2017 14:11:44
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>

using namespace std;

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

int rmq[501][501][10];
int lg[501],n,m,x,y;

int main()
{
    fin >> n >> m;
    lg[0] = 0;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
            fin >> rmq[i][j][0];
        if(i>1)
            lg[i] = 1+lg[i / 2];
    }

    for(int k = 1; (1<<k) <= n;k++)
        for(int i = 1; i + (1<<(k-1)) - 1<=n;i++)
            for(int j = 1;j + (1<<(k-1)) - 1 <= n; j++)
                rmq[i][j][k] = max(rmq[i][j][k-1],
                               max(rmq[i+(1<<(k-1))][j][k-1],
                               max(rmq[i][j+(1<<(k-1))][k-1],
                                   rmq[i+(1<<(k-1))][j+(1<<(k-1))][k-1])));

    for(int q=1;q<=m;q++)
    {
        int k,l;
        fin>>x>>y>>k;
        l = lg[k];
        fout<<max( rmq[x][y][l],
              max( rmq[x][y + k - (1<<l)][l]   ,
              max( rmq[x + k - (1<<l)][y][l],
                   rmq[x + k - (1<<l)][y + k - (1<<l)][l]   )))<<'\n';
    }

}