Pagini recente » Cod sursa (job #171217) | Cod sursa (job #1322744) | Cod sursa (job #2824921) | Cod sursa (job #1922429) | Cod sursa (job #1679101)
#include <fstream>
#include <iostream>
using namespace std;
int v[510][510][12];
int log[550];
int n, m;
void calc();
int maxim(int x, int y, int z, int t);
int maxim(int x, int y);
int main()
{
ifstream in("plantatie.in");
in >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
in >> v[i][j][0];
}
// for (int i = 1; i <= n; i++) {
// for (int j = 1; j <= n; j++)
// cout << v[i][j][0] << ' ';
// cout << '\n';
// }
calc();
int a, b, l, k;
ofstream out("plantatie.out");
while (m--) {
in >> a >> b >> k;
a += k - 1;
b += k - 1;
l = log[k];
out << maxim(v[a][b][l], v[a][b - k + (1 << l)][l], v[a - k + (1 << l)][b][l], v[a - k + (1 << l)][b - k + (1 << l)][l]) << '\n';
}
return 0;
}
void calc() {
for (int i = 2; i <= 510; i++)
log[i] = 1 + log[i / 2];
for (int i = 2; i <= n; i++) {
for (int j = 2; j <= n; j++) {
for (int k = 1; (1 << k) <= n; k++) {
if (i - (1 << (k - 1)) < 0 || j - (1 << (k - 1)) < 0)
continue;
v[i][j][k] = maxim(v[i][j][k - 1], v[i][j - (1 << (k - 1))][k - 1], v[i - (1 << (k - 1))][j][k - 1], v[i - (1 << (k - 1))][j - (1 << (k - 1))][k - 1]);
}
}
}
}
int maxim(int x, int y) {
return x > y ? x : y;
}
int maxim(int x, int y, int z, int t) {
return maxim(maxim(x, y), maxim(z, t));
}