Pagini recente » Cod sursa (job #449198) | Cod sursa (job #2606889) | Cod sursa (job #667817) | Cod sursa (job #250800) | Cod sursa (job #1813022)
#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][1]);
for (i=1;i<=n;i++)
l[i]=l[i/2]+1;
for (i=2;(1<<(i-1))<=n;i++)
for (j=1;j<=(n-(1<<(i-1))+1);j++)
for (k=1;k<=(n-(1<<(i-1))+1);k++)
{
Max=0;
if (rmq[j+(1<<(i-2))][k][i-1]>rmq[j][k][i-1])
Max=rmq[j+(1<<(i-2))][k][i-1];
else
Max=rmq[j][k][i-1];
if (rmq[j][k+(1<<(i-2))][i-1]>Max)
Max=rmq[j][k+(1<<(i-2))][i-1];
if (rmq[j+(1<<(i-2))][k+(1<<(i-2))][i-1]>Max)
Max=rmq[j+(1<<(i-2))][k+(1<<(i-2))][i-1];
rmq[j][k][i]=Max;
}
for (i=1;i<=m;i++)
{
scanf ("%d %d %d", &x, &y, &k);
if (rmq[x][y][l[k]]>rmq[x+k-(1<<(l[k]-1))][y+k-(1<<(l[k]-1))][l[k]])
printf ("%d\n", rmq[x][y][l[k]]);
else
printf ("%d\n", rmq[x+k-(1<<(l[k]-1))][y+k-(1<<(l[k]-1))][l[k]]);
}
return 0;
}