Pagini recente » Cod sursa (job #837691) | Cod sursa (job #2526934) | Cod sursa (job #276147) | Cod sursa (job #610447) | Cod sursa (job #3133966)
#include <iostream>
#include <fstream>
using namespace std;
ifstream inputFile("plantatie.in");
ofstream outputFile("plantatie.out");
int plantation[12][512][512], numTrees, queryCount, gridSizeX, gridSizeY;
inline int maximum(int x, int y) {
return x > y ? x : y;
}
int main() {
inputFile >> gridSizeX >> gridSizeY;
for (int i = 0; i < gridSizeX; ++i) {
for (int j = 0; j < gridSizeY; ++j) {
inputFile >> plantation[0][i][j];
}
}
for (int k = 1; (1 << k) <= gridSizeX; ++k) {
for (int i = 0; i <= gridSizeX; ++i) {
for (int j = 0; j <= gridSizeY; ++j) {
plantation[k][i][j] = maximum(maximum(plantation[k - 1][i][j], plantation[k - 1][i + (1 << (k - 1))][j]),
maximum(plantation[k - 1][i][j + (1 << (k - 1))], plantation[k - 1][i + (1 << (k - 1))][j + (1 << (k - 1))]));
}
}
}
inputFile >> queryCount;
for (int i = 1; i <= queryCount; ++i) {
int x, y, k;
inputFile >> x >> y >> k;
int q = 1;
x--; y--;
int nr = 0;
while (q <= k) {
nr++;
q *= 2;
}
q /= 2;
nr--;
outputFile << maximum(maximum(plantation[nr][x][y], plantation[nr][x + k - q][y]),
maximum(plantation[nr][x][y + k - q], plantation[nr][x + k - q][y + k - q])) << '\n';
}
return 0;
}