Cod sursa(job #2563123)

Utilizator robert.barbu27robert barbu robert.barbu27 Data 29 februarie 2020 23:43:47
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 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=0;
  while((1<<logaritm)<=k)
    logaritm++;
  logaritm--;
    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<<lg;
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';


}

}