Pagini recente » Cod sursa (job #1591926) | Cod sursa (job #73266) | Cod sursa (job #1162149) | Cod sursa (job #49065) | Cod sursa (job #1813093)
#include <cstdio>
using namespace std;
int i,j,k,n,m,l[504],rmq[504][504][13],Max,x,y;
int main()
{
freopen ("plantatie.in","r",stdin);
freopen ("plantatie.out","w",stdout);
scanf ("%d %d", &n, &m);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
scanf ("%d", &rmq[i][j][0]);
l[1]=0;
for (i=2;i<=n;i++)
l[i]=l[i/2]+1;
for (i=1;(1<<i)<=n;i++)
for (j=1;j<=(n-(1<<i)+1);j++)
for (k=1;k<=(n-(1<<i)+1);k++)
{
Max=0;
if (rmq[j+(1<<(i-1))][k][i-1]>rmq[j][k][i-1])
Max=rmq[j+(1<<(i-1))][k][i-1];
else
Max=rmq[j][k][i-1];
if (rmq[j][k+(1<<(i-1))][i-1]>Max)
Max=rmq[j][k+(1<<(i-1))][i-1];
if (rmq[j+(1<<(i-1))][k+(1<<(i-1))][i-1]>Max)
Max=rmq[j+(1<<(i-1))][k+(1<<(i-1))][i-1];
rmq[j][k][i]=Max;
}
for (i=1;i<=m;i++)
{
scanf ("%d %d %d", &x, &y, &k);
Max=0;
if (rmq[x][y][l[k]]>rmq[x+k-(1<<l[k])][y+k-(1<<l[k])][l[k]])
Max=rmq[x][y][l[k]];
else
Max=rmq[x+k-(1<<l[k])][y+k-(1<<l[k])][l[k]];
if (Max<rmq[x][y+k-(1<<l[k])][l[k]])
Max=rmq[x][y+k-(1<<l[k])][l[k]];
if (Max<rmq[x+k-(1<<l[k])][y][l[k]])
Max=rmq[x+k-(1<<l[k])][y][l[k]];
printf ("%d\n", Max);
}
return 0;
}