Pagini recente » Cod sursa (job #803489) | Cod sursa (job #1948445) | Cod sursa (job #792169) | Cod sursa (job #1344800) | Cod sursa (job #534764)
Cod sursa(job #534764)
#include<cstdio>
#include<cmath>
#include<fstream>
using namespace std;
int logn,n,q,p2[20],putmax[502],dmax[502][502][10];
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])));
}
void pregen()
{
int ind=0;
for(int i=1;i<=n;i++)
{
if(p2[ind]==i)
ind++;
putmax[i]=ind-1;
}
}
int rmq(int ii,int ij,int lung)
{
int p=putmax[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();
pregen();
for(int i=1;i<=q;++i)
{
f>>x>>y>>l;
printf("%d\n",rmq(x,y,l));
}
return 0;
}