Pagini recente » Cod sursa (job #2367352) | Cod sursa (job #139489) | Cod sursa (job #1312462) | Cod sursa (job #2458530) | Cod sursa (job #2790999)
#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, p[501], d[10][501][501], maxim, l, ii, jj, x, y;
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
int main ()
{
fin>>n>>m;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
fin>>d[0][i][j];
p[1]=0; /// p[i]=cea mai mare putere de 2 mai mica sau egala cu i
for (i=2; i<=n; i++)
p[i]=p[i/2]+1;
///d[l][i][j]=val maxima din patratul de latura 2^l cu coltul din st sus in (i,j)
for (l=1; l<=p[n]; l++)
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
if (i+(1<<l)-1<=n && j+(1<<l)-1<=n)
{
maxim=d[l-1][i][j];
ii=i+(1<<(l-1));
jj=j+(1<<(l-1));
if (maxim<d[l-1][ii][j])
maxim=d[l-1][ii][j];
if (maxim<d[l-1][ii][jj])
maxim=d[l-1][ii][jj];
if (maxim<d[l-1][i][jj])
maxim=d[l-1][i][jj];
d[l][i][j]=maxim;
}
for (int t=1; t<=m; t++)
{
fin>>i>>j>>x;
maxim=d[p[x]][i][j];
y=(1<<p[x]);
if (maxim<d[p[x]][i+x-y][j])
maxim=d[p[x]][i+x-y][j];
if (maxim<d[p[x]][i+x-y][j+x-y])
maxim=d[p[x]][i+x-y][j+x-y];
if (maxim<d[p[x]][i][j+x-y])
maxim=d[p[x]][i][j+x-y];
fout<<maxim<<"\n";
}
}