Pagini recente » Cod sursa (job #1255691) | Cod sursa (job #348780) | Cod sursa (job #593385) | Cod sursa (job #1255650) | Cod sursa (job #2973732)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 502;
int pow2[30], lg2[NMAX], dp[NMAX][NMAX][30], m[NMAX][NMAX];
int solve( int l, int c, int k ){
int ind = k - pow2[lg2[k]];
k = lg2[k];
return max({ dp[l + ind][c][k], dp[l][c + ind][k], dp[l][c][k], dp[l + ind][c + ind][k] });
}
int main()
{
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int n, q, a, b, k;
in >> n >> q;
for( int l = 1 ; l <= n ; l++ )
for( int c = 1 ; c <= n ; c++ )
in >> m[l][c];
for( int i = 2 ; i <= n ; i++ )
lg2[i] = lg2[i / 2] + 1;
pow2[0] = 1;
for( int i = 1; i < 30 ; i++ )
pow2[i] = pow2[i-1] * 2;
for( int l = 1 ; l <= n ; l++ )
for( int c = 1 ; c <= n ; c++ )
dp[l][c][0] = m[l][c];
for( int k = 1 ; (1 << k) <= n; k++ )
for( int l = 1; l + (1 << k) - 1 <= n; l++)
for( int c = 1 ; c + ( 1 << k ) - 1 <= n ; c++ )
dp[l][c][k] = max({ dp[l][c][k-1], dp[l + ( 1 << (k-1) )][c][k-1], dp[l][c + (1 << (k-1) )][k-1], dp[l + (1 << (k-1) )][c + (1 << (k-1))][k-1] });
while(q--){
in >> a >> b >> k;
out << solve(a, b, k ) << endl;
}
return 0;
}