Pagini recente » Cod sursa (job #2054800) | Cod sursa (job #2419962) | Cod sursa (job #2440305) | Cod sursa (job #1061106) | Cod sursa (job #1301012)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("plantatie.in");
ofstream g ("plantatie.out");
const int NMAX = 500 + 1;
const int LOGMAX = 9 + 1;
int n, m;
int lg[NMAX], rmq[LOGMAX][NMAX][NMAX];
void citeste() {
f >> n >> m;
int x;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
f >> rmq[0][i][j];
}
}
void initializeaza() {
for (int i = 2; i <= n; i++) lg[i] = 1 + lg[i / 2];
int q;
for (int k = 1; k <= lg[n]; k++) {
q = 1 << (k - 1);
for (int i = 1; i <= n - q + 1; i++)
for (int j = 1; j <= n - q + 1; j++)
rmq[k][i][j] = max(rmq[k - 1][i][j], max(rmq[k - 1][i][j + q], max(rmq[k - 1][i + q][j], rmq[k - 1][i + q][j + q])));
}
}
void raspunde() {
int i, j, k, l, p;
while (m--) {
f >> i >> j >> k;
l = lg[k];
p = (1 << l);
g << max(rmq[l][i][j], max(rmq[l][i + k - p][j], max(rmq[l][i][j + k - p], rmq[l][i + k - p][j + k - p]))) << '\n';
}
}
int main() {
citeste();
initializeaza();
raspunde();
return 0;
}