Pagini recente » Cod sursa (job #1975473) | Cod sursa (job #2388356) | Cod sursa (job #51405) | Cod sursa (job #550704) | Cod sursa (job #2886810)
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
const int NMAX = 505, LGMAX = 11;
int rmq[LGMAX][NMAX][NMAX], v[NMAX][NMAX], lg2[NMAX], n;
void build_rmq()
{
int i, j, lg;
for(i = 2; i <= n; i++)
lg2[i] = lg2[i/2] + 1;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
rmq[0][i][j] = v[i][j];
for(lg = 1; lg < LGMAX; lg++)
for(i = 1; i + (1 << lg) - 1 <= n; i++)
for(j = 1; j + (1 << lg) - 1 <= n; j++)
rmq[lg][i][j] = max({rmq[lg-1][i][j], rmq[lg-1][i + (1 << (lg-1))][j], rmq[lg-1][i][j + (1 << (lg-1))], rmq[lg-1][i + (1 << (lg-1))][j + (1 << (lg-1))]});
}
int query(int i, int j, int lat)
{
int lg = lg2[lat], x = i + lat - 1, y = j + lat - 1;
return max({rmq[lg][i][j], rmq[lg][x-(1<<lg)+1][j], rmq[lg][i][y-(1<<lg)+1], rmq[lg][x-(1<<lg)+1][y-(1<<lg)+1]});
}
int main()
{
int q, i, j, lat;
cin >> n >> q;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
cin >> v[i][j];
build_rmq();
while(q--)
{
cin >> i >> j >> lat;
cout << query(i, j, lat) << '\n';
}
return 0;
}