Pagini recente » Istoria paginii utilizator/antoniapopovici | Cod sursa (job #995812) | Cod sursa (job #1006078) | Cod sursa (job #1828302) | Cod sursa (job #2841572)
#include <fstream>
const int MAX_N = 500;
int rmq[10][1 + MAX_N][1 + MAX_N], log[1 + MAX_N];
int main() {
std::ifstream fin("plantatie.in");
std::ofstream fout("plantatie.out");
int n, q;
fin >> n >> q;
for (int i = 2; i <= MAX_N; i++) {
log[i] = log[i >> 1] + 1;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
fin >> rmq[0][i][j];
}
}
for (int p = 1; (1 << p) <= n; p++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j + (1 << p) - 1 <= n; j++) {
rmq[p][i][j] = std::max(std::max(rmq[p - 1][i][j], rmq[p - 1][i][j + (1 << (p - 1))]), std::max(rmq[p - 1][i + (1 << (p - 1))][j],
rmq[p - 1][i + (1 << (p - 1))][j + (1 << (p - 1))]));
}
}
}
for (int i = 1; i <= q; i++) {
int l, c, lat;
fin >> l >> c >> lat;
int p = log[lat];
fout << std::max(std::max(rmq[p][l][c], rmq[p][l][l + lat - (1 << p)]), std::max(rmq[p][l + lat - (1 << p)][c],
rmq[p][l + lat - (1 << p)][c + lat - (1 << p)])) << "\n";
}
return 0;
}