Pagini recente » Cod sursa (job #786510) | Cod sursa (job #1399024) | Cod sursa (job #2350553) | Cod sursa (job #1963266) | Cod sursa (job #3037495)
#include <fstream>
#include <cmath>
#define NMAX 502
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int n, q, x;
int val, crt;
int lin, col, dim, ans;
int plant[10][NMAX][NMAX];
int main()
{
int i, j, k;
cin >> n >> q;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
cin >> plant[0][i][j];
val = (int) log2(n);
for(k = 1; k <= val; k++)
{
crt = 1 << k;
for(i = 1; i <= n - crt + 1; i++)
for(j = 1; j <= n - crt + 1; j++)
plant[k][i][j] = plant[k - 1][i][j],
plant[k][i][j] = max(plant[k][i][j], plant[k - 1][i][j + crt / 2]),
plant[k][i][j] = max(plant[k][i][j], plant[k - 1][i + crt / 2][j]),
plant[k][i][j] = max(plant[k][i][j], plant[k - 1][i + crt / 2][j + crt / 2]);
//plant[k][i][j] = max(plant[k - 1][i][j], plant[k - 1][i][j + crt / 2 - 1], plant[k - 1][i + crt / 2 - 1][j], plant[k - 1][i + crt / 2 - 1][j + crt / 2 - 1]);
}
/*for(k = 0; k <= val; k++)
{
crt = 1 << k;
for(i = 1; i <= n - crt + 1; i++)
{
for(j = 1; j <= n - crt + 1; j++)
cout << plant[k][i][j] << ' ';
cout << '\n';
}
cout << '\n';
}*/
while(q--)
{
cin >> lin >> col >> dim;
val = (int) log2(dim);
crt = 1 << val;
///cout << dim << ' ' << val << ' ' << crt << '\n';
///cout << lin + dim - crt << ' ' << col + dim - crt << '\n';
x = plant[val][lin][col],
x = max(x, plant[val][lin][col + dim - crt]),
x = max(x, plant[val][lin + dim - crt][col]),
x = max(x, plant[val][lin + dim - crt][col + dim - crt]);
cout << x << '\n';
}
return 0;
}