Pagini recente » Cod sursa (job #2916215) | Cod sursa (job #659199) | Cod sursa (job #1900000) | Cod sursa (job #1759586) | Cod sursa (job #3133416)
#include <fstream>
#include <algorithm>
using namespace std;
#define MAX 512
int plan[MAX][MAX][10];
int n, m;
int level[MAX];
int main()
{
ifstream f ("plantatie.in");
ofstream g("plantatie.out");
int i, j, k;
f>>n>>m;
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
f>>plan[i][j][0];
for (k = 1; (1 << (k-1)) < n; ++k)
for (i = n - (1 << (k-1)); i; --i)
for (j = n - (1 << (k-1)); j; --j)
{
plan[i][j][k] = max(plan[i][j][k], plan[i][j][k-1]);
plan[i][j][k] = max(plan[i][j][k], plan[i+(1 << (k-1))][j][k-1]);
plan[i][j][k] = max(plan[i][j][k], plan[i][j+(1<<(k-1))][k-1]);
plan[i][j][k] = max(plan[i][j][k], plan[i+(1 << (k-1))][j+(1<<(k-1))][k-1]);
}
int next = 2;
int levl=0, rezolv;
for (i = 2; i <= n; ++i)
{
level[i] = levl;
if (i == next)
{next <<= 1;
++levl;}
}
for (; m; --m)
{
f>>i>>j>>k;
if (k == 1)
g<<plan[i][j][0];
else
{rezolv = plan[i][j][level[k]];
rezolv= max(rezolv, plan[i][j+k-(1<<level[k])][level[k]]);
rezolv= max(rezolv, plan[i+k-(1<<level[k])][j][level[k]]);
rezolv= max(rezolv, plan[i+k-(1<<level[k])][j+k-(1<<level[k])][level[k]]);
g<<rezolv;}
}
return 0;
}