Cod sursa(job #2138510)

Utilizator MarinPeptenaruMarin Vasile Peptenaru MarinPeptenaru Data 21 februarie 2018 18:18:59
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
const int nx=502;
int n,m,rmq[20][nx][nx],i,j,k,lg[nx],ii,jj,ans,p;
void build ()
{
    in>>n>>m;
    for(i=1; i<=n; i++)
    {
        if(i>=2) lg[i]=lg[i/2]+1;
        for(j=1; j<=n; j++)
            in>>rmq[0][i][j];
    }
    for(k=1; (1<<k)<=n; k++)
        for(i=1; i<=n-(1<<(k-1)); i++)
            for(j=1; j<=n-(1<<(k-1)); j++)
                rmq[k][i][j]=max(max(rmq[k-1][i][j],rmq[k-1][i+(1<<(k-1))][j]),max(rmq[k-1][i][j+(1<<(k-1))],rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))]));

}
int main()
{
    build();
    for(;m;m--)
    {
        in>>i>>j>>k;
        p=lg[k];
        out<<max(max(rmq[p][i][j],rmq[p][i+k-(1<<p)][j+k-(1<<p)]),
                 max(rmq[p][i+k-(1<<p)][j],rmq[p][i][j+k-(1<<p)]))<<'\n';
    }
    return 0;
}