Pagini recente » Cod sursa (job #490263) | Cod sursa (job #690007) | Cod sursa (job #1788548) | Cod sursa (job #2847570) | Cod sursa (job #2397532)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 505;
int dp[MAXN][MAXN][20];
int mat[MAXN][MAXN];
int main()
{
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
fin >> mat[i][j];
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j)
dp[i][j][0] = mat[i][j];
}
for(int k = 1; k <= log2(n) + 1; ++k){
for(int i = 1; i <= n && i + (1 << k) <= n + 1; ++i){
for(int j = 1; j <= n && j + (1 << k) <= n + 1; ++j){
dp[i][j][k] = dp[i][j][k - 1];
dp[i][j][k] = max(dp[i][j][k], dp[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]);
dp[i][j][k] = max(dp[i][j][k], dp[i + (1 << (k - 1))][j][k - 1]);
dp[i][j][k] = max(dp[i][j][k], dp[i][j + (1 << (k - 1))][k - 1]);
}
}
}
while(m){
int x, y, dist;
fin >> x >> y >> dist;
int put = log2(dist);
int ans = max(dp[x][y][put], dp[x + dist - (1 << put)][y][put]);
ans = max(ans, dp[x][y + dist - (1 << put)][put]);
ans = max(ans, dp[x + dist - (1 << put)][y + dist - (1 << put)][put]);
fout << ans << "\n";
m--;
}
return 0;
}