Pagini recente » Cod sursa (job #2612852) | Cod sursa (job #2074653) | Cod sursa (job #1031483) | Cod sursa (job #14529) | Cod sursa (job #236547)
Cod sursa(job #236547)
#include <stdio.h>
#define nmax 505
int n, m, x, y, d;
int p [nmax], w [10] [nmax] [nmax];//v [i] [j] [k]=elementul maxim din patratul cu coltul stanga-sus in (j, k) si de latura 2^i
void puteri ()
{
int w, i;
for (w=1; (1 << w) <= nmax; ++w)
for (i=(1 << w); i < (1 << (w+1)); ++i)
p [i]=w;
}
void scan ()
{
int i, j;
scanf ("%d%d", &n, &m);
for (i=1; i <= n; ++i)
for (j=1; j <= n; ++j)
scanf ("%d", &w [0] [i] [j]);
}
inline int max (int a, int b)
{
return (a > b)? a:b;
}
void preg ()
{
int i, j, k, u, q;
for (i=1; i <= p [n]; ++i)
{
q=1 << (i-1);
u=n-(1 << i)+1;
for (j=1; j <= u; ++j)
for (k=1; k <= u; ++k)
w [i] [j] [k]=max (w [i-1] [j] [k], max (w [i-1] [j] [k+q], max (w [i-1] [j+q] [k], w [i-1] [j+q] [k+q])));
}
}
int main ()
{
freopen ("plantatie.in", "r", stdin);
freopen ("plantatie.out", "w", stdout);
puteri ();
scan ();
preg ();
int t;
for (int i=1; i <= m; ++i)
{
scanf ("%d%d%d", &x, &y, &d);
t=d-(1 << p [d]);
printf ("%d\n", max (w [p [d]] [x] [y], max (w [p [d]] [x] [y+t], max (w [p [d]] [x+t] [y], w [p [d]] [x+t] [y+t]))));
}
return 0;
}