Pagini recente » Cod sursa (job #315639) | Cod sursa (job #1580571) | Cod sursa (job #253118) | Cod sursa (job #3125833) | Cod sursa (job #2647690)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("plantatie.in");
ofstream fo("plantatie.out");
const int NMAX = 505;
const int LGMAX = 10;
int n, q, M[NMAX][NMAX];
int rmq[LGMAX][NMAX][NMAX];
void getRmq() {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
rmq[0][i][j] = M[i][j];
for (int l = 1; (1 << l) <= n; l++) {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
rmq[l][i][j] = max(max(rmq[l - 1][i][j], rmq[l - 1][i + (1 << (l - 1))][j]), max(rmq[l - 1][i + (1 << (l - 1))][j + (1 << (l - 1))],
rmq[l - 1][i][j + (1 << (l - 1))]));
}
}
}
int main()
{
fi >> n >> q;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
fi >> M[i][j];
getRmq();
while (q--) {
int lin, col, k;
fi >> lin >> col >> k;
int lmax = 0;
while ((1 << (lmax + 1)) <= k)
lmax++;
int ans = 0;
//cout << max(-100, rmq[lmax][lin][col + k - (1 << lmax)]);
ans = max(rmq[lmax][lin][col], rmq[lmax][lin][col + k - (1 << lmax)]);
ans = max(ans, max(rmq[lmax][lin + k - (1 << lmax)][col], rmq[lmax][lin + k - (1 << lmax)][col + k - (1 << lmax)]));
fo << ans << "\n";
}
return 0;
}