Pagini recente » Arhiva de probleme | Cod sursa (job #517768) | Autentificare | Cod sursa (job #245092) | Cod sursa (job #2052587)
#include <fstream>
#define DEF 510
#define DEF2 11
using namespace std;
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
int n, m, D[DEF][DEF][DEF2], log[DEF];
int main () {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
fin >> D[i][j][0];
}
}
log[1] = 0;
for (int i = 2; i <= n; i++)
log[i] = 1 + log[i / 2];
for (int k = 1; (1 << k) <= n; k++) {
for (int i = 1; i + (1 << (k - 1)) <= n; i++) {
for (int j = 1; j + (1 << (k - 1)) <= n; j++) {
int Max = -1;
if (D[i][j][k - 1] > Max) {
Max = D[i][j][k - 1];
}
if (D[i][j + (1 << (k - 1))][k - 1] > Max) {
Max = D[i][j + (1 << (k - 1))][k - 1];
}
if (D[i + (1 << (k - 1))][j][k - 1] > Max) {
Max = D[i + (1 << (k - 1))][j][k - 1];
}
if (D[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1] > Max) {
Max = D[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1];
}
D[i][j][k] = Max;
}
}
}
for (; m; -- m) {
int i1, i2, j1, j2, l;
fin >> i1 >> j1 >> l;
i2 = i1 + l - 1;
j2 = j1 + l - 1;
l = log[l];
int Max = -1;
if (D[i1][j1][l] > Max) {
Max = D[i1][j1][l];
}
if (D[i1][j2 - (1 << l) + 1][l] > Max) {
Max = D[i1][j2 - (1 << l) + 1][l];
}
if (D[i2 - (1 << l) + 1][j1][l] > Max) {
Max = D[i2 - (1 << l) + 1][j1][l];
}
if (D[i2 - (1 << l) + 1][j2 - (1 << l) + 1][l] > Max) {
Max = D[i2 - (1 << l) + 1][j2 - (1 << l) + 1][l];
}
fout << Max << '\n';
}
return 0;
}