Pagini recente » Cod sursa (job #2088237) | Cod sursa (job #2868272) | Cod sursa (job #293632) | Cod sursa (job #1190781) | Cod sursa (job #1046495)
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
const int MAX_N = 505;
const int MAX_LOG = 11;
int n, m, rmq[MAX_LOG][MAX_N][MAX_N], Log2[MAX_N];
void read() {
f >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
f >> rmq[0][i][j];
}
void precompute() {
Log2[1] = 0;
for (int i = 2; i < MAX_N; i++)
Log2[i] = Log2[i / 2] + 1;
for (int k = 1; (1 << k) <= n; k++) {
int prev = k - 1;
int offset = (1 << prev);
for (int i = 1; i + (1 << k) - 1 <= n; i++)
for (int j = 1; j + (1 << k) - 1 <= n; j++)
rmq[k][i][j] = max (max (rmq[prev][i][j], rmq[prev][i + offset][j]), max (rmq[prev][i][j + offset], rmq[prev][i + offset][j + offset]));
}
}
void solve() {
while (m--) {
int i, j, k, p;
f >> i >> j >> k;
p = Log2[k];
int nexti = i + k - 1;
int nextj = j + k - 1;
g << max (max (rmq[p][i][j], rmq[p][i][nextj - (1 << p) + 1]), max (rmq[p][nexti - (1 << p) + 1][j], rmq[p][nexti - (1 << p) + 1][nextj - (1 << p) + 1])) << '\n';
}
}
int main() {
read();
precompute();
solve();
return 0;
}