Pagini recente » Cod sursa (job #2745039) | Cod sursa (job #1229209) | Cod sursa (job #676802) | Cod sursa (job #253995) | Cod sursa (job #2049150)
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n,m,i,j,d[501][501][11],l[501],x,k,nr;
int main()
{
fin >> n >> m;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
fin >> d[i][j][0];
///rmq 2D
///d[i][j][k] = maximul din patratul care se termina in i j si
///cu lungimea 2 la k
for (i=2; i<=n; i++)
l[i] = l[i/2]+1;
for (k=1; (1<<k)<=n; k++)
{
x = (1<<(k-1));
for (i=(1<<k); i<=n; i++)
for (j=(1<<k); j<=n; j++)
{
d[i][j][k] = max(d[i][j][k], d[i][j][k-1]);
d[i][j][k] = max(d[i][j][k], d[i][j-x][k-1]);
d[i][j][k] = max(d[i][j][k], d[i-x][j][k-1]);
d[i][j][k] = max(d[i][j][k], d[i-x][j-x][k-1]);
}
}
for (;m--;)
{
fin >> i >> j >> k;
x = (1<<l[k]);
nr = max(d[i+x-1][j+x-1][l[k]], d[i+x-1][j+k-1][l[k]]);
nr = max(nr, d[i+k-1][j+x-1][l[k]]);
nr = max(nr, d[i+k-1][j+k-1][l[k]]);
fout << nr << "\n";
}
return 0;
}