Pagini recente » Cod sursa (job #1564009) | Cod sursa (job #2698570) | Cod sursa (job #1363700) | Cod sursa (job #2022710) | Cod sursa (job #3178065)
#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int nmax = 500, lgmax = 9;
int a[5 + nmax][5 + nmax], lg2[5 + nmax], rmq[5 + lgmax][5 + nmax][5 + nmax];
void precalcLog(int n) {
for (int i = 2; i <= n; i++)
lg2[i] = 1 + lg2[i >> 1];
}
void buildRmq(int n) {
precalcLog(n);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
rmq[0][i][j] = a[i][j];
for (int k = 1; (1 << k) <= n; k++)
for (int i = 1; i + (1 << k) - 1 <= n; i++)
for (int j = 1; j + (1 << k) - 1 <= n; j++)
rmq[k][i][j] = max({rmq[k - 1][i][j], rmq[k - 1][i + (1 << (k - 1))][j],
rmq[k - 1][i][j + (1 << (k - 1))], rmq[k - 1][i + (1 << (k - 1))][j + (1 << (k - 1))]});
}
int queryRmq(int x, int y, int l) {
int lg = lg2[l];
return max({rmq[lg][x][y], rmq[lg][x + l - (1 << lg)][y], rmq[lg][x][y + l - (1 << lg)], rmq[lg][x + l - (1 << lg)][y + l - (1 << lg)]});
}
signed main() {
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, q;
fin >> n >> q;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
fin >> a[i][j];
buildRmq(n);
while (q--) {
int i, j, l;
fin >> i >> j >> l;
fout << queryRmq(i, j, l) << '\n';
}
return 0;
}