Pagini recente » Cod sursa (job #2163382) | Cod sursa (job #2796923) | Cod sursa (job #2661202) | Cod sursa (job #1691309) | Cod sursa (job #2789361)
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, m, maxim[503][503][11], lg[503];
int main() {
fin >> n >> m;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
fin >> maxim[i][j][0];
}
}
// preprocesare
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++) {
/*
m[i][j][k] = max(m[i][j][k - 1], m[i][j + 2 ^k-1][k - 1], m[i + 2^k-1][j][k - 1],
m[i + 2^k-1][j + 2 ^k-1][k - 1]);
*/
maxim[i][j][k] = max(maxim[i][j][k - 1], maxim[i][j + (1 << (k - 1))][k - 1]);
maxim[i][j][k] = max(maxim[i][j][k], maxim[i + (1 << (k - 1))][j][k - 1]);
maxim[i][j][k] = max(maxim[i][j][k], maxim[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]);
}
}
}
for(int i = 2; i <= n; i++) {
lg[i] = lg[i / 2] + 1;
}
// query-uri
for(int i = 1; i <= m; i++) {
int x, y, l;
fin >> x >> y >> l;
int k = lg[l];
int p = 1 << k;
/*
maxRmq = max(m[x][y][k], m[x + l - p][y][k], m[x][y + l - p][k],
m[x + l - p][y + l - p][k]);
*/
int maxRmq = max(maxim[x][y][k], maxim[x + l - p][y][k]);
maxRmq = max(maxRmq, maxim[x][y + l - p][k]);
maxRmq = max(maxRmq, maxim[x + l - p][y + l - p][k]);
fout << maxRmq << "\n";
}
return 0;
}