Pagini recente » Cod sursa (job #378399) | Cod sursa (job #233832) | Cod sursa (job #726144) | Cod sursa (job #122348) | Cod sursa (job #2158405)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int NMAX = 500 + 5;
const int PMAX = log2(NMAX) + 3;
int n, m, x, y, l;
int rmq[NMAX][NMAX][PMAX];
int max4(int a, int b, int c, int d)
{
int max1 = max(a, b);
int max2 = max(c, d);
return max(max1, max2);
}
void build()
{
for (int k = 1; k <= log2(n); ++k)
for (int i = 1; i + (1 << k) - 1 <= n; ++i)
for (int j = 1; j + (1 << k) - 1 <= n; ++j)
rmq[i][j][k] = max4(rmq[i][j][k - 1], rmq[i + (1 << (k - 1))][j][k - 1], rmq[i][j + (1 << (k - 1))][k - 1], rmq[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]);
}
int query(int x, int y, int k)
{
int loga = (int)log2(k);
return max4(rmq[x][y][loga], rmq[x + k - (1 << loga)][y][loga], rmq[x][y + k - (1 << loga)][loga], rmq[x + k - (1 << loga)][y + k - (1 << loga)][loga]);
}
void read()
{
fin >> n >> m;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
fin >> rmq[i][j][0];
}
int main()
{
read();
build();
while (m--)
{
fin >> x >> y >> l;
fout << query(x, y, l) << '\n';
}
return 0;
}