Pagini recente » Cod sursa (job #1270054) | Cod sursa (job #82232) | Cod sursa (job #2401955) | Cod sursa (job #1103939) | Cod sursa (job #2397529)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 505;
int dp[MAXN][MAXN][20];
int mat[MAXN][MAXN];
int logar[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 = 2; i <= n; ++i)
logar[i] = logar[i / 2] + 1;
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 <= logar[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 = logar[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;
}