Pagini recente » Cod sursa (job #2324506) | Cod sursa (job #1358802) | Cod sursa (job #234748) | Cod sursa (job #1655106) | Cod sursa (job #3170666)
#include <bits/stdc++.h>
using namespace std;
// , << >> .
ifstream f("plantatie.in");
ofstream g("plantatie.out");
const int NMAX = 505;
const int LOG = 9;
int rmaxq[NMAX][NMAX][LOG];
int n;
int q, is, js, lat;
inline int maxim(int a, int b)
{
return (a > b ? a : b);
}
void precompute()
{
for(int k = 1; k < LOG; k++)
for(int i = 1; i + (1 << k) - 1 <= n; i++)
for(int j = 1; j + (1 << k) - 1 <= n; j++)
{
rmaxq[i][j][k] = maxim(rmaxq[i][j][k - 1],
maxim(rmaxq[i + (1 << (k - 1))][j][k - 1],
maxim(rmaxq[i][j + (1 << (k - 1))][k - 1],
rmaxq[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1])));
}
}
int Query(int is, int js, int lat)
{
int k = 31 - __builtin_clz(lat);
return (maxim(
maxim(rmaxq[is][js][k], rmaxq[is + lat - (1 << k)][js][k]),
maxim(rmaxq[is][js + lat - (1 << k)][k], rmaxq[is + lat - (1 << k)][js + lat - (1 << k)][k])
));
}
int main()
{
f >> n >> q;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
f >> rmaxq[i][j][0];
precompute();
for(int i = 1; i <= q; i++)
{
f >> is >> js >> lat;
g << Query(is, js, lat) << '\n';
}
}