Pagini recente » Cod sursa (job #2071505) | Cod sursa (job #22622) | Cod sursa (job #193284) | Cod sursa (job #273115) | Cod sursa (job #19186)
Cod sursa(job #19186)
#include <cstdio>
#include <algorithm>
using namespace std;
#define Nmax 512
int rmq[Nmax][Nmax][10];
int n, m;
int level[Nmax];
int main()
{
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
int i, j, k;
scanf("%d %d", &n, &m);
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
scanf("%d", &rmq[i][j][0]);
for (k = 1; (1 << (k-1)) < n; ++k)
for (i = n - (1 << (k-1)); i; --i)
for (j = n - (1 << (k-1)); j; --j)
{
rmq[i][j][k] = max(rmq[i][j][k], rmq[i][j][k-1]);
rmq[i][j][k] = max(rmq[i][j][k], rmq[i+(1 << (k-1))][j][k-1]);
rmq[i][j][k] = max(rmq[i][j][k], rmq[i][j+(1<<(k-1))][k-1]);
rmq[i][j][k] = max(rmq[i][j][k], rmq[i+(1 << (k-1))][j+(1<<(k-1))][k-1]);
}
int next = 2, lev = 0, rez;
for (i = 2; i <= n; ++i)
{
level[i] = lev;
if (i == next)
{
next <<= 1;
++lev;
}
}
for (; m; --m)
{
scanf("%d %d %d", &i, &j, &k);
if (k == 1) printf("%d\n", rmq[i][j][0]);
else
{
rez = rmq[i][j][level[k]];
rez = max(rez, rmq[i][j+k - (1 << level[k])][level[k]]);
rez = max(rez, rmq[i+k - (1 << level[k])][j][level[k]]);
rez = max(rez, rmq[i+k - (1 << level[k])][j+k - (1 << level[k])][level[k]]);
printf("%d\n", rez);
}
}
return 0;
}