Pagini recente » Cod sursa (job #789145) | Cod sursa (job #850058) | Cod sursa (job #140123) | Cod sursa (job #1119926) | Cod sursa (job #1322038)
#include <fstream>
using namespace std;
ifstream in ("plantatie.in");
ofstream out ("plantatie.out");
const int kNMax = 550, kLgMax = 14;
int n, Q, dp[kNMax][kNMax][kLgMax], lg[kNMax];
void CitireMatrice() {
int i, j;
in >> n >> Q;
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
in >> dp[i][j][0];
}
void RMQ() {
int i, j, k, q;
for (i = 2; i <= n; ++i)
lg[i] = lg[i / 2] + 1;
for (k = 1; k <= lg[n]; ++k){
q = 1 << (k-1);
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
dp[i][j][k] = max (dp[i][j][k-1], max (dp[i+q][j][k-1], max (dp[i][j+q][k-1], dp[i+q][j+q][k-1])));
}
}
void QSolve() {
int i, x, y, l, llog, q, sol;
for (i = 1; i <= Q; ++i) {
in >> x >> y >> l;
llog = lg[l];
q = (1 << llog);
sol = max (dp[x][y][llog], max (dp[x+l-q][y][llog], max (dp[x][y+l-q][llog], dp[x+l-q][y+l-q][llog])));
out << sol << '\n';
}
}
int main() {
CitireMatrice();
RMQ();
QSolve();
in.close();
out.close();
return 0;
}