Cod sursa(job #2563117)

Utilizator robert.barbu27robert barbu robert.barbu27 Data 29 februarie 2020 23:38:38
Problema Plantatie Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb

#include <bits/stdc++.h>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int rmq[20][505][505];
int n,m;
int solve(int x,int y,int k)
{
    int logaritm=log2(k);
    int rasp=max(rmq[logaritm][x][y],rmq[logaritm][x+k-(1<<logaritm)][y+k-(1<<logaritm)]);
    rasp=max(rasp,max(rmq[logaritm][x+k-(1<<logaritm)][y],rmq[logaritm][x][y+k-(1<<logaritm)]));
    return rasp;


}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)
{
    for(int j=1;j<=n;j++)
    {
        f>>rmq[0][i][j];
    }
}
for(int lg=1;(1<<lg)<=n;lg++)
{
    int l=1<<l;
for(int i=1;i<=n-l+1;i++)
{
    for(int j=1;j<=n-l+1;j++)
    {
        rmq[lg][i][j]=max(rmq[lg-1][i][j],rmq[lg-1][i+(1<<(lg-1))][j+(1<<(lg-1))]);
        rmq[lg][i][j]=max(rmq[lg][i][j],max(rmq[lg-1][i][j+(1<<(lg-1))],rmq[lg-1][i+(1<<(lg-1))][j]));
        //cout<<rmq[lg][i][j]<<" ";
    }

}
}
for(int i=1;i<=m;i++)
{
    int x,y,k;
    f>>x>>y>>k;
    g<<solve(x,y,k)<<'\n';


}

}