Pagini recente » Cod sursa (job #1636855) | Cod sursa (job #97401) | Cod sursa (job #2835417) | Cod sursa (job #130584) | Cod sursa (job #2398788)
#include <iostream>
#include <fstream>
#include <cmath>
const int MAXN = 500 + 5;
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int n,query,dp[MAXN][MAXN][MAXN],v[MAXN][MAXN];
int main()
{
in>>n>>query;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
in>>v[i][j];
dp[0][i][j] = v[i][j];
}
}
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++){
int put = (1<<(k - 1));
dp[k][i][j] = max(dp[k - 1][i][j],dp[k - 1][i + put][j + put]);;
dp[k][i][j] = max(dp[k][i][j],dp[k - 1][i][j + put]);
dp[k][i][j] = max(dp[k][i][j],dp[k - 1][i + put][j]);
}
}
}
for(int test = 1; test <= query; test++){
int i,j,k,log,put;
in>>i>>j>>k;
log = log2(k);
put = (1<<log);
int ans = max(dp[log][i][j],dp[log][i + k - put][j]);
ans = max(ans,max(dp[log][i][j + k - put],dp[log][i + k - put][j + k - put]));
out<<ans<<'\n';
}
return 0;
}