Pagini recente » Cod sursa (job #251829) | Cod sursa (job #33442) | Cod sursa (job #80288) | Cod sursa (job #2223493) | Cod sursa (job #3201369)
#include <bits/stdc++.h>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
const int NMAX = 502;
int pow2[12], lg2[NMAX], dp[NMAX][NMAX][30], m[NMAX][NMAX];
static inline 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()
{
ios_base::sync_with_stdio(false);
in.tie(nullptr), out.tie(nullptr);
int n, q, a, b, k, ll, cc;
in >> n >> q;
for( int l = 1 ; l <= n ; l++ )
for( int c = 1 ; c <= n ; c++ ){
in >> m[l][c];
dp[l][c][0] = m[l][c];
}
for( int i = 2 ; i <= n ; i++ )
lg2[i] = lg2[i / 2] + 1;
pow2[0] = 1;
for( int i = 1; i < 12 ; i++ )
pow2[i] = pow2[i-1] * 2;
for( int lg = 1 ; lg <= lg2[n] ; lg++ )
for( int l = 1; ( ll = l + pow2[lg - 1]) <= n; l++)
for( int c = 1 ; ( cc = c + pow2[lg - 1]) <= n ; c++ )
dp[l][c][lg] = max({ dp[l][c][lg - 1], dp[ll][c][lg - 1], dp[l][cc][lg - 1], dp[ll][cc][lg - 1] });
while(q--){
in >> a >> b >> k;
out << solve(a, b, k) << "\n";
}
return 0;
}