Pagini recente » Profil unchnoun | Diferente pentru documentatie/textile intre reviziile 8 si 9 | Diferente pentru problema/produse2 intre reviziile 4 si 5 | Istoria paginii utilizator/enachecarla | Cod sursa (job #2015324)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int dp[505][505][15];
int put2[30];
int main() {
put2[0] = 1;
for (int i=1; i<=20; i++){
put2[i] = put2[i-1] * 2 ;
}
int n, m;
cin>>n>>m;
//cout<<n<<" "<<m<<'\n'<<'\n';
for (int i=1; i<=n; i++){
for (int j=1; j<=n; j++){
cin>>dp[i][j][0];
//cout<<dp[i][j][0]<<'\n';
}
}
for (int i=n; i>=1; i--){
for (int j=n; j>=1; j--){
for (int k=1; put2[k]<=n - max(i, j) + 1; k++){
dp[i][j][k] = max ( max( dp[i + put2[k-1]][j][k-1] , dp[i][j + put2[k-1]][k-1] ) ,
max( dp[i][j][k-1] , dp[i + put2[k-1]][j + put2[k-1]][k-1] ) );
}
}
}
for (int i=1; i<=m; i++){
int x,y,lat;
cin>>x>>y>>lat;
int logar = (int)log2(lat);
// cout<<x<<" "<<y<<" "<<lat<<'\n';
cout<<max ( max(dp[x][y][logar] , dp[x + lat - put2[logar]][y + lat - put2[logar]][logar] ) ,
max( dp[x + lat - put2[logar]][y][logar] , dp[x][y + lat - put2[logar]][logar]));
cout<<'\n';
}
return 0;
}