Pagini recente » Cod sursa (job #2839629) | Cod sursa (job #1821044) | Cod sursa (job #2015988) | Cod sursa (job #2867764) | Cod sursa (job #2563090)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int st,dr,mij,v[18][505][505],n,q,m,x,y,lat,put,maxim,maxp;
int p[20];
int main()
{
fin>>n>>q;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
fin>>v[0][i][j];
p[0]=1;
for(int i=1;i<=18;i++)
p[i]=p[i-1]*2;
for(int j=0;j<=18;j++)
if(p[j]>n)
{maxp=j-1;break;}
for(int k=1;k<=maxp;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
put=(1<<(k-1));
v[k][i][j]=max(v[k][i][j],v[k-1][i][j]);
v[k][i][j]=max(v[k][i][j],v[k-1][i+put][j]);
v[k][i][j]=max(v[k][i][j],v[k-1][i][j+put]);
v[k][i][j]=max(v[k][i][j],v[k-1][i+put][j+put]);
}
}
}
for(int k=1;k<=q;k++)
{
fin>>x>>y>>lat;
st=0;
dr=18;
while(st<=dr)
{
mij=(st+dr)/2;
if(p[mij]<=lat)
{
put=mij;
st=mij+1;
}
else dr=mij-1;
}
maxim=v[put][x][y];
maxim=max(maxim,v[put][x+lat-p[put]][y]);
maxim=max(maxim,v[put][x][y+lat-p[put]]);
maxim=max(maxim,v[put][x+lat-p[put]][y+lat-p[put]]);
fout<<maxim<<endl;
}
}