Pagini recente » Cod sursa (job #2062865) | Cod sursa (job #1268682) | Cod sursa (job #62929) | Cod sursa (job #2173035) | Cod sursa (job #2787950)
#include <bits/stdc++.h>
#define DIM 505
#define LOG 10
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n, m, dp[DIM][DIM][LOG];// dp[i][j][k] maximul din patratul cu coltul stanga sus in i, j de latura 2^k
int lg[DIM];
int main()
{
f >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
f >> dp[i][j][0];
for(int i = 2; i <= LOG; i++)
lg[i] = lg[i / 2] + 1;
for(int i = 1; i <= lg[n]; i++)
for(int j = 1; j + (1 << i) - 1 <= n; j++)
for(int k = 1; k + (1 << i) - 1 <= n; k++)
dp[j][k][i] = max(max(dp[j][k][i - 1], dp[j + (1 << i - 1)][k + (1 << i - 1)][i - 1]),
max(dp[j][k + (1 << i - 1)][i - 1], dp[j + (1 << i - 1)][k][i - 1]));
for(int i = 1; i <= m; i++)
{
int x, y, l;
f >> x >> y >> l;
int k = lg[l];
int sol = max(max(dp[x][y][k], dp[x][y + l - (1 << k)][k]),
max(dp[x + l - (1 << k)][y][k], dp[x + l - (1 << k)][y + l - (1 << k)][k]));
g << sol << "\n";
}
return 0;
}