Pagini recente » Cod sursa (job #1156237) | Cod sursa (job #3133443)
#include <iostream>
#include <fstream>
using namespace std;
const int MAX_SIZE = 510;
const int MAX_LOG = 9;
int dp[MAX_LOG][MAX_SIZE][MAX_SIZE], prec[MAX_LOG];
int main()
{
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int size, queries, idx1, idx2, idx3, len, len2;
fin >> size >> queries;
for (idx1 = 1; idx1 <= size; idx1++)
for (idx2 = 1; idx2 <= size; idx2++)
fin >> dp[0][idx1][idx2];
for (idx1 = 2; idx1 <= size; idx1++)
prec[idx1] = 1 + prec[(idx1 >> 1)];
for (idx3 = 1; idx3 <= prec[size]; idx3++)
{
int lat = (1 << (idx3 - 1));
for (idx1 = lat; idx1 <= size; idx1++)
for (idx2 = lat; idx2 <= size; idx2++)
dp[idx3][idx1][idx2] = max(max(dp[idx3 - 1][idx1][idx2], dp[idx3 - 1][idx1][idx2 - lat]), max(dp[idx3 - 1][idx1 - lat][idx2 - lat], dp[idx3 - 1][idx1 - lat][idx2]));
}
while (queries)
{
fin >> idx1 >> idx2 >> len;
idx1 += len - 1;
idx2 += len - 1;
len2 = (1 << prec[len]);
fout << max(max(dp[prec[len]][idx1 - len + len2][idx2 - len + len2], dp[prec[len]][idx1][idx2 - len + len2]), max(dp[prec[len]][idx1][idx2], dp[prec[len]][idx1 - len + len2][idx2])) << "\n";
queries--;
}
fin.close();
fout.close();
return 0;
}