Pagini recente » Cod sursa (job #3275488) | Cod sursa (job #1098579) | Cod sursa (job #530011) | Cod sursa (job #1425699) | Cod sursa (job #3230138)
#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 (size_t i = 0; i < N; ++i) {
for (size_t j = 0; j < N; ++j) {
input >> prod[i][j];
}
}
for (size_t power = 0; power < logN; ++power) {
for (size_t i = 0; i < N; ++i) {
for (size_t j = 0; j < N; ++j) {
if (!power) rmq[i][j][power] = prod[i][j];
else
{
if(i + (1 << (power - 1)) < N && j + (1 << (power - 1)) < N)
{
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 (size_t 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;
}