Pagini recente » Cod sursa (job #2102198) | Cod sursa (job #231984) | Cod sursa (job #312509) | Cod sursa (job #2778361) | Cod sursa (job #2898213)
#include <fstream>
using namespace std;
const int N = 500;
const int L = 8;
int r[L+1][N+1][N+1], log[N+1];
int maxim(int l, int c, int lat)
{
int e = log[lat];
int p = (1 << e);
return max(max(r[e][l-lat+p][c-lat+p], r[e][l-lat+p][c]), max(r[e][l][c-lat+p], r[e][l][c]));
}
int main()
{
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int n, q;
in >> n >> q;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
in >> r[0][i][j];
}
}
///precalculam r[e][i][j]
for (int e = 1; (1 << e) <= n; e++)
{
for (int i = (1 << e); i <= n; i++)
{
for (int j = (1 << e); j <= n; j++)
{
int p = (1 << (e - 1));
r[e][i][j] = max(max(r[e-1][i-p][j-p], r[e-1][i-p][j]),
max(r[e-1][i][j-p], r[e-1][i][j]));
}
}
}
///precalculam log[j]
log[1] = 0;
for (int j = 2; j <= n; j++)
{
log[j] = 1 + log[j/2];
}
///raspundem la intrebari
for (int i = 0; i < q; i++)
{
int l, c, lat;
in >> l >> c >> lat;
l += lat - 1;///coordonatele coltului dreapta jos
c += lat - 1;
out << maxim(l, c, lat) << "\n";
}
in.close();
out.close();
return 0;
}