Pagini recente » Cod sursa (job #2598447) | Cod sursa (job #1195171) | Cod sursa (job #2983422) | Cod sursa (job #2330922) | Cod sursa (job #3249906)
#include <iostream>
#include <fstream>
#define NMAX 500
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int m,n,a[NMAX+1][NMAX+1],rmq[10][NMAX+1][NMAX+1],x,y,z;
int log2(int x)
{
int log=0;
while (x>0)
{
log++;
x/=2;
}
return log-1;
}
int main()
{
fin >> n >> m;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
{
fin >> a[i][j];
rmq[0][i][j]=a[i][j];
}
int p=2;
int log=log2(n);
for (int o=1; o<=log; o++)
{
for (int i=1; i<=n-p+1; i++)
{
for (int j=1; j<=n-p+1; j++)
rmq[o][i][j]=max(max(rmq[o-1][i][j],rmq[o-1][i+p-1][j]),max(rmq[o-1][i][j+p-1],rmq[o-1][i+p-1][j+p-1]));
for (int j=n-p+1; j<=n; j++)
rmq[o][i][j]=rmq[o][i][n-p+1];
}
for (int i=n-p+1; i<=n; i++)
{
for (int j=1; j<=n-p+1; j++)
rmq[o][i][j]=rmq[o][n-p+1][j];
for (int j=n-p+1; j<=n; j++)
rmq[o][i][j]=rmq[o][n-p+1][n-p+1];
}
p*=2;
}
for (int i=1; i<=m; i++)
{
fin >> x >> y >> z;
log=log2(z);
p=1;
for (int j=1; j<=log; j++)
p*=2;
//fout << x << " " << y << " " << x+z-(p) << " " << y+z-(p) << '\n';
if (p==z)
fout << rmq[log][x][y] << '\n';
else
fout << max(max(rmq[log][x][y],rmq[log][x+z-p][y]),max(rmq[log][x][y+z-p],rmq[log][x+z-p][y+z-p])) << '\n';
}
return 0;
}