Pagini recente » Cod sursa (job #184188) | Cod sursa (job #2750284)
#include <bits/stdc++.h>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
const int NMAX = 505;
int n, q;
int dp[NMAX][NMAX][10], lg[NMAX];
int main() {
f >> n >> q;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
f >> dp[i][j][0];
}
}
for(int i = 2; i <= n; i++) {
lg[i] = 1 + lg[i / 2];
}
for(int k = 1; (1 << k) <= n; k++) {
for(int i = 1; i + (1 << k) - 1 <= n; i++) {
for(int j = 1; j + (1 << k) - 1 <= n; j++) {
dp[i][j][k] = max(max(dp[i][j][k - 1], dp[i][j + (1 << (k - 1))][k - 1]), max(dp[i + (1 << (k - 1))][j][k - 1], dp[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]));
}
}
}
while(q--) {
int x, y, k;
f >> x >> y >> k;
int x1 = x + k - 1;
int y1 = y + k - 1;
int p = lg[k];
int sol = max(max(dp[x][y][p], dp[x][y1 - (1 << p) + 1][p]), max(dp[x1 - (1 << p) + 1][y][p], dp[x1 - (1 << p) + 1][y1 - (1 << p) + 1][p]));
g << sol << '\n';
}
return 0;
}