Pagini recente » Cod sursa (job #2159545) | Cod sursa (job #712131) | Cod sursa (job #471011) | Cod sursa (job #1600832) | Cod sursa (job #534760)
Cod sursa(job #534760)
#include<cstdio>
#include<cmath>
#include<fstream>
using namespace std;
int logn,n,q,p2[20],dmax[505][505][20];
ifstream f("plantatie.in");
void read()
{
freopen("plantatie.out","w",stdout);
f>>n>>q;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
f>>dmax[i][j][0];
}
void init()
{
logn=log2(n);
p2[0]=1;
for(int i=1;i<=logn;++i)
p2[i]=p2[i-1]<<1;
}
inline int max(int x,int y)
{
return x>y?x:y;
}
void dinam()
{
for(int k=1;k<=logn;++k)
for(int i=1;i+p2[k]-1<=n;++i)
for(int j=1;j+p2[k]-1<=n;++j)
dmax[i][j][k]=max(dmax[i][j][k-1],max(dmax[i+p2[k-1]][j][k-1],max(dmax[i][j+p2[k-1]][k-1],dmax[i+p2[k-1]][j+p2[k-1]][k-1])));
}
int cautb(int val)
{
int i=0,pas=1<<3;
for(i=0;pas;pas>>=1)
if(i+pas<=logn && p2[i+pas]<=val)
i+=pas;
return i;
}
int rmq(int ii,int ij,int lung)
{
int p=cautb(lung),fi=ii+lung-1,fj=ij+lung-1;
return max(dmax[ii][ij][p],max(dmax[fi-p2[p]+1][ij][p],max(dmax[ii][fj-p2[p]+1][p],dmax[fi-p2[p]+1][fj-p2[p]+1][p])));
}
int main()
{
int x,y,l;
read();
init();
dinam();
for(int i=1;i<=q;++i)
{
f>>x>>y>>l;
printf("%d\n",rmq(x,y,l));
}
return 0;
}