Pagini recente » Cod sursa (job #2941611) | Cod sursa (job #273109) | Cod sursa (job #38934) | Cod sursa (job #390704) | Cod sursa (job #3232334)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAXN = 500;
const int LOG = 9;
int N, M;
int grid[MAXN][MAXN];
int st[LOG][LOG][MAXN][MAXN];
void rmq() {
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
st[0][0][i][j] = grid[i][j];
}
}
for (int x = 0; (1 << x) <= N; ++x) {
for (int y = 0; (1 << y) <= N; ++y) {
if (x == 0 && y == 0) continue;
for (int i = 0; i + (1 << x) - 1 < N; ++i) {
for (int j = 0; j + (1 << y) - 1 < N; ++j) {
if (x == 0) {
st[x][y][i][j] = max(st[x][y-1][i][j], st[x][y-1][i][j + (1 << (y-1))]);
} else if (y == 0) {
st[x][y][i][j] = max(st[x-1][y][i][j], st[x-1][y][i + (1 << (x-1))][j]);
} else {
st[x][y][i][j] = max(
max(st[x-1][y-1][i][j], st[x-1][y-1][i + (1 << (x-1))][j]),
max(st[x-1][y-1][i][j + (1 << (y-1))], st[x-1][y-1][i + (1 << (x-1))][j + (1 << (y-1))])
);
}
}
}
}
}
}
int query(int i, int j, int k) {
int x = (int)log2(k);
int max_val = max(
max(st[x][x][i][j], st[x][x][i + k - (1 << x)][j]),
max(st[x][x][i][j + k - (1 << x)], st[x][x][i + k - (1 << x)][j + k - (1 << x)])
);
return max_val;
}
int main() {
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
fin >> N >> M;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
fin >> grid[i][j];
}
}
rmq();
for (int q = 0; q < M; ++q) {
int i, j, k;
fin >> i >> j >> k;
i--; j--;
int result = query(i, j, k);
fout << result << "\n";
}
fin.close();
fout.close();
return 0;
}