Pagini recente » Cod sursa (job #2249888) | Cod sursa (job #1884026) | Cod sursa (job #2367327) | Cod sursa (job #2901888) | Cod sursa (job #1487442)
#include <cstdio>
#include <cmath>
int n,m,p;
int rmq[523][523][10],a[523][523];
int maxim(int a,int b,int c,int d)
{
int m=0;
if(a>m) m=a;
if(b>m) m=b;
if(c>m) m=c;
if(d>m) m=d;
return m;
}
int main()
{
freopen ("plantatie.in","r",stdin);
freopen ("plantatie.out","w",stdout);
scanf("%d%d",&n,&m);
p=(int)log2(n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
rmq[i][j][0]=a[i][j];
}
}
for(int k=1;k<=p;k++)
{
int pt=(1<<(k-1));
int lim=n-pt+1;
for(int i=1;i<=lim;i++)
{
for(int j=1;j<=lim;j++)
{
rmq[i][j][k]=maxim(rmq[i][j][k-1],rmq[i+pt][j+pt][k-1],rmq[i+pt][j][k-1],rmq[i][j+pt][k-1]);
}
}
}
int p1,p2,latura;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&p1,&p2,&latura);
int lgt=(int)log2(latura);
printf("%d\n",maxim(rmq[p1][p2][lgt],rmq[p1+latura-(1<<lgt)][p2][lgt],rmq[p1][p2+latura-(1<<lgt)][lgt],rmq[p1+latura-(1<<lgt)][p2+latura-(1<<lgt)][lgt]));
}
}