Pagini recente » Cod sursa (job #480015) | Cod sursa (job #565431) | Cod sursa (job #1243548) | Cod sursa (job #1733115) | Cod sursa (job #3134298)
#include <fstream>
using namespace std;
string fisier = "plantatie";
ifstream in(fisier + ".in");
ofstream out(fisier + ".out");
const int N = 500;
int dp[9][N + 1][N + 1], np(0), p[9];
int main()
{
int n, m, x, k, i, j, e, st;
in >> n >> m;
p[np++] = 1;
for (i = 2; i <= n; i = i << 1)
{
p[np++] = i;
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
in >> dp[0][i][j];
}
}
for (k = 1; k < np; k++)
{
for (i = p[k]; i <= n; i++)
{
for (j = p[k]; j <= n; j++)
{
dp[k][i][j] = max(max(dp[k - 1][i][j], dp[k - 1][i - p[k - 1]][j]), max(dp[k - 1][i][j - p[k - 1]], dp[k - 1][i - p[k - 1]][j - p[k - 1]]));
}
}
}
while (m--)
{
in >> i >> j >> k;
st = 1, e = np - 1;
while (st <= e)
{
int mid = (st + e) / 2;
if (p[mid] <= k)
{
st = mid + 1;
}
else
{
e = mid - 1;
}
}
x = p[e];
out << max(max(dp[e][i + x - 1][j + x - 1], dp[e][i + k - 1][j + x - 1]), max(dp[e][i + x - 1][j + k - 1], dp[e][i + k - 1][j + k - 1])) << '\n';
}
}