Pagini recente » Cod sursa (job #2598631) | Cod sursa (job #818438) | Cod sursa (job #2583187) | Cod sursa (job #3039438) | Cod sursa (job #3301727)
#include <fstream>
using namespace std;
const string txt = "plantatie";
ifstream f(txt + ".in");
ofstream g(txt + ".out");
int n, q, rmq[505][505][20], loog[505];
void Range_Max()
{
for (int i = 2; i <= n; i++) loog[i] = loog[i / 2] + 1;
for (int t = 1; t <= loog[n]; t++)
{
for (int i = 1; i <= n - (1 << t) + 1; i++)
for (int j = 1; j <= n - (1 << t) + 1; j++) {
int m1 = max(rmq[i][j][t - 1], rmq[i + (1 << (t - 1))][j][t - 1]);
int m2 = max(rmq[i][j + (1 << (t - 1))][t - 1], rmq[i + (1 << (t - 1))][j + (1 << (t - 1))][t - 1]);
rmq[i][j][t] = max(m1, m2);
}
}
}
int maxim(int l, int c, int nr)
{
int l2 = l + nr - 1, c2 = c + nr - 1;
int num = loog[nr];
int ans = max(rmq[l][c][num], rmq[l2 - (1 << num) + 1][c][num]);
int ans2 = max(rmq[l][c2 - (1 << num) + 1][num], rmq[l2 - (1 << num) + 1][c2 - (1 << num) + 1][num]);
return max(ans, ans2);
}
int main()
{
f >> n >> q;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
f >> rmq[i][j][0];
Range_Max();
for (; q >= 1; q--)
{
int x, y, lg; f >> x >> y >> lg;
g << maxim(x, y, lg) << '\n';
}
return 0;
}