Pagini recente » Cod sursa (job #2845361) | Cod sursa (job #551973) | Cod sursa (job #321558) | Cod sursa (job #1822977) | Cod sursa (job #3230188)
#include <cmath>
#include <fstream>
#include <iostream>
using namespace std;
const int NMAX = 5e2;
int mx[10][NMAX + 5][NMAX + 5];
// mx[k][i][j] -> holds maximum value for squares of size (1 << k) with top left corner at line i, column j
int main()
{
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int n, m, x, y, z;
cin >> n >> m;
for (int lineIndex = 1; lineIndex <= n; lineIndex++)
for (int columnIndex = 1; columnIndex <= n; columnIndex++)
cin >> mx[0][lineIndex][columnIndex];
for (int dimension = 1; dimension <= (int)log2(n); dimension++)
for (int lineIndex = 1; lineIndex <= n - (1 << dimension) + 1; lineIndex++)
for (int columnIndex = 1; columnIndex <= n - (1 << dimension) + 1; columnIndex++)
{
mx[dimension][lineIndex][columnIndex] = numeric_limits<int>::min();
for (int configuration = 0; configuration < 4; configuration++)
{
int newLineIndex = lineIndex + ((configuration & (1 << 0)) != 0) * (1 << (dimension - 1));
int newColumnIndex = columnIndex + ((configuration & (1 << 1)) != 0) * (1 << (dimension - 1));
mx[dimension][lineIndex][columnIndex] = max(mx[dimension][lineIndex][columnIndex], mx[dimension - 1][newLineIndex][newColumnIndex]);
}
}
for (int dimension = 0; dimension <= (int)log2(n); dimension++)
{
for (int lineIndex = 1; lineIndex <= n - (1 << dimension) + 1; lineIndex++)
{
for (int columnIndex = 1; columnIndex <= n - (1 << dimension) + 1; columnIndex++)
cout << mx[dimension][lineIndex][columnIndex] << " ";
cout << endl;
}
cout << endl;
}
for (int queryIndex = 1; queryIndex <= m; queryIndex++)
{
cin >> x >> y >> z;
int dimension = ceil(log2(z));
int result = numeric_limits<int>::min();
for (int configuration = 0; configuration < 4; configuration++)
{
int lineIndex = x + ((configuration & (1 << 0)) != 0) * (z - (1 << (dimension - 1)));
int columnIndex = y + ((configuration & (1 << 1)) != 0) * (z - (1 << (dimension - 1)));
result = max(result, mx[dimension - 1][lineIndex][columnIndex]);
}
cout << result << endl;
}
return 0;
}