Pagini recente » Cod sursa (job #3241988) | Cod sursa (job #2352703) | Cod sursa (job #3279490) | Cod sursa (job #146423) | Cod sursa (job #3240575)
#include <iostream>
#include <fstream>
std::ifstream f("plantatie.in");
std::ofstream g("plantatie.out");
const int NMAX = 500, LOGMAX = 10;
int r[LOGMAX + 1][NMAX + 1][NMAX + 1];
int log2[NMAX + 1];
int n, m, i1, i2, j1, j2, lat;
int main()
{
f >> n >> m;
for (int i = 2; i <= n; i++)
log2[i] = log2[i >> 1] + 1;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
f >> r[0][i][j];
for (int p = 1, lat = 2; lat <= n; p++, lat *= 2)
for (int i1 = 1; i1 <= n - lat + 1; i1++)
for (int j1 = 1; j1 <= n - lat + 1; j1++)
{
i2 = i1 + (lat >> 1); /// i1 + (1 << (p - 1))
j2 = j1 + (lat >> 1); /// j1 + (1 << (p - 1))
r[p][i1][j1] = std::max(std::max(r[p - 1][i1][j1], r[p - 1][i2][j1]),
std::max(r[p - 1][i1][j2], r[p - 1][i2][j2]));
}
while (m--)
{
f >> i1 >> j1 >> lat;
i2 = i1 + lat - (1 << (log2[lat]));
j2 = j1 + lat - (1 << (log2[lat]));
g << std::max(std::max(r[log2[lat]][i1][j1], r[log2[lat]][i2][j1]),
std::max(r[log2[lat]][i1][j2], r[log2[lat]][i2][j2])) << '\n';
}
f.close();
g.close();
return 0;
}