Pagini recente » Cod sursa (job #526188) | Cod sursa (job #1150603) | Cod sursa (job #1338687) | Cod sursa (job #819179) | Cod sursa (job #3158594)
#include <bits/stdc++.h>
#define NMAX 512
#define LMAX 10
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int rmq[LMAX][NMAX][NMAX],n,m,x,y,lat;
void build_RMQ();
int main()
{
int i,j,k,lg;
fin>>n>>m;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
fin>>rmq[0][i][j];
build_RMQ();
for(k=1; k<=m; k++)
{
fin>>x>>y>>lat;
int xf=x+lat-1,
yf=y+lat-1;
lg=1;
i=0;
while(lg<=lat)
{
lg*=2;
i++;
}
lg/=2;
i--;
int r=max(max(rmq[i][x][y],
rmq[i][x][yf-lg+1]),
max(rmq[i][xf-lg+1][y],
rmq[i][xf-lg+1][yf-lg+1]));
fout<<r<<'\n';
}
return 0;
}
void build_RMQ()
{
int i,j,k,lg;
for(k=1,lg=2; lg<=n; k++,lg*=2)
for(i=1; i+lg-1<=n; i++)
for(j=1; j+lg-1<=n; j++)
{
int i1=i+lg/2, j1=j+lg/2;
rmq[k][i][j]=max(max(rmq[k-1][i][j],
rmq[k-1][i][j1]),
max(rmq[k-1][i1][j],
rmq[k-1][i1][j1]));
}
}