Pagini recente » Cod sursa (job #757985) | Arhiva de probleme | Cod sursa (job #164768) | Cod sursa (job #632840) | Cod sursa (job #2035930)
#include <fstream>
#include <cmath>
#define MAXN 505
using namespace std;
ifstream fin("planatie.in");
ofstream fout("plantatie.out");
int D[MAXN][MAXN][10];
int n, m;
inline void Read() {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
fin >> D[i][j][0];
}
}
}
inline void rmq() {
int k = log2(n), p2 = 1, nn;
for (int q = 1; q <= k; q++) {
nn = n - p2 * 2 + 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
D[i][j][q] = max(D[i][j][q - 1], D[i][j + p2][q - 1]);
D[i][j][q] = max(D[i][j][q], D[i + p2][j][q - 1]);
D[i][j][q] = max(D[i][j][q], D[i + p2][j + p2][q - 1]);
//fout << D[i][j][q] << " ";
}
//fout << "\n";
}
p2 <<= 1;
// fout << "\n";
}
}
inline void Query() {
int sol, kk, p2, x, y, l, xx, yy;
for (int i = 1; i <= m; i++) {
fin >> x >> y >> l;
xx = x + l; yy = y + l;
kk = log2(l); p2 = 1 << kk;
sol = max(D[x][y][kk], D[x][yy - p2][kk]);
sol = max(sol, D[xx - p2][y][kk]);
sol = max(sol, D[xx - p2][yy - p2][kk]);
fout << sol << "\n";
}
}
int main () {
Read();
rmq();
Query();
fin.close(); fout.close(); return 0;
}