Pagini recente » Cod sursa (job #2660182) | Cod sursa (job #296457) | Cod sursa (job #3231997) | Cod sursa (job #79619) | Cod sursa (job #3242256)
#include <bits/stdc++.h>
const std :: string FILENAME = "plantatie";
std :: ifstream in (FILENAME + ".in");
std :: ofstream out (FILENAME + ".out");
const int NMAX = 5e2 + 5;
const int LOGMAX = 10;
int n;
int q;
int x;
int y;
int k;
int a[NMAX][NMAX];
int dp[LOGMAX][NMAX][NMAX];
void precalc()
{
for(int p = 1; p < LOGMAX; p ++)
{
for(int i = 1; i + (1 << p) <= n + 1; i ++)
{
for(int j = 1; j + (1 << p) <= n + 1; j ++)
{
dp[p][i][j] = std :: max({dp[p - 1][i][j], dp[p - 1][i + (1 << (p - 1))][j], dp[p - 1][i][j + (1 << (p - 1))], dp[p - 1][i + (1 << (p - 1))][j + (1 << (p - 1))]});
}
}
}
}
int main()
{
in >> n >> q;
for(int i = 1; i <= n; i ++)
{
for(int j = 1; j <= n; j ++)
{
in >> a[i][j];
dp[0][i][j] = a[i][j];
}
}
precalc();
while(q --)
{
in >> x >> y >> k;
int lg = log2(k);
out << std :: max({dp[lg][x][y], dp[lg][x + k - (1 << lg)][y], dp[lg][x][y + k - (1 << lg)], dp[lg][x + k - (1 << lg)][y + k - (1 << lg)]}) << '\n';
}
return 0;
}