Pagini recente » Cod sursa (job #1409774) | Cod sursa (job #523947) | Cod sursa (job #2584918) | Cod sursa (job #716178) | Cod sursa (job #3230135)
#include <fstream>
#include <bit>
int main()
{
std::ifstream input("plantatie.in");
std::ofstream output("plantatie.out");
unsigned int N, M;
input >> N >> M;
unsigned int logN = std::bit_width(N);
int prod[N][N], rmq[N][N][logN];
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
input >> prod[i][j];
}
}
for (int power = 0; power < logN; ++power) {
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
if (!power) rmq[i][j][power] = prod[i][j];
else
{
rmq[i][j][power] = std::max(std::max(std::max(rmq[i][j][power - 1], rmq[i + (1 << (power - 1))][j][power - 1]), rmq[i][j + (1 << (power - 1))][power - 1]), rmq[i + (1 << (power - 1))][j + (1 << (power - 1))][power - 1]);
}
}
}
}
for (int i = 0; i < M; ++i) {
unsigned int x, y, side;
input >> x >> y >> side;
x--; y--;
unsigned int logside = std::bit_width(side) - 1;
output << std::max(std::max(std::max(rmq[x][y][logside], rmq[x + side - (1 << logside)][y][logside]), rmq[x][y + side - (1 << logside)][logside]), rmq[x + side - (1 << logside)][y + side - (1 << logside)][logside]) << std::endl;
}
return 0;
}