Pagini recente » Cod sursa (job #68853) | Cod sursa (job #2886798)
#include <fstream>
using namespace std;
ifstream in ("plantatie.in");
ofstream out ("plantatie.out");
const int max_size = 5e2 + 1, max_exp = 11;
int a[max_size][max_size], rmq[max_exp][max_size][max_size], lg[max_size];
int main ()
{
int n, t;
in >> n >> t;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
in >> a[i][j];
rmq[0][i][j] = a[i][j];
}
}
lg[1] = 0;
for (int i = 2; i <= n; i++)
{
lg[i] = lg[i / 2] + 1;
}
for (int e = 1; (1 << e) <= n; e++)
{
int p = (1 << (e - 1));
for (int i = p + 1; i <= n; i++)
{
for (int j = p + 1; j <= n; j++)
{
rmq[e][i][j] = max(rmq[e - 1][i - p][j - p], max(rmq[e - 1][i - p][j], max(rmq[e - 1][i][j - p], rmq[e - 1][i][j])));
}
}
}
while (t--)
{
int l, c, lat;
in >> l >> c >> lat;
int e = lg[lat];
int p = (1 << e);
int i = l + lat - 1, j = c + lat - 1;
out << max(rmq[e][i - lat + p][j - lat + p], max(rmq[e][i - lat + p][j], max(rmq[e][i][j - lat + p], rmq[e][i][j]))) << '\n';
}
in.close();
out.close();
return 0;
}