Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3121856)
#include <fstream>
#define NMAX 505
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int n, m, i1, i2, j2, lat, e[NMAX], r[10][NMAX][NMAX], len, jj;
int main() {
ios_base::sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> r[0][i][j];
for (int p = 1, lat = 2; lat <= n; p++, lat *= 2) {
for (int i1 = 1; i1 <= n - lat + 1; i1++) {
for (int j1 = 1; j1 <= n - lat + 1; j1++) {
r[p][i1][j1] = max(max(r[p - 1][i1][j1], r[p - 1][i1 + (1 << (p - 1))][j1]),
max(r[p - 1][i1][j1 + (1 << (p - 1))],
r[p - 1][i1 + (1 << (p - 1))][j1 + (1 << (p - 1))]));
}
}
}
e[1] = 0;
for (int i = 2; i <= n; i++) {
e[i] = 1 + e[i / 2];
}
for (int i = 1; i <= m; i++) {
cin >> i1 >> jj >> lat;
len = (1 << e[lat]);
i2 = i1 + lat - len;
j2 = jj + lat - len;
cout << max(max(r[e[lat]][i1][jj], r[e[lat]][i1][j2]), max(r[e[lat]][i2][jj], r[e[lat]][i2][j2])) << '\n';
}
return 0;
}