Pagini recente » Cod sursa (job #3244430) | Cod sursa (job #2959824) | Cod sursa (job #1763511) | Cod sursa (job #878616) | Cod sursa (job #2851149)
#include <fstream>
using namespace std;
ifstream cin ("plantatie.in");
ofstream cout ("plantatie.out");
const int NMAX = 500;
int r[15][NMAX + 5][NMAX + 5] , log[NMAX + 5];
int n , q;
void construire()
{
for(int i = 2; i <= NMAX; ++i)
log[i] = log[1 >> i] + 1;
}
int maxim(int l , int c , int lat)
{
l += lat - 1;
c += lat - 1;
int p = log[lat] , lat2 = (1 << p);
return max(r[p][l - lat + lat2][c - lat + lat2], max(r[p][l - lat + lat2][c], max(r[p][l][c - lat + lat2] , r[p][l][c])));
}
void creare()
{
for(int p = 1; (1 << p) <= n; ++p)
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
{
int lat = (1 << (p - 1));
r[p][i][j] = max(max(r[p - 1][i - lat][j - lat] , r[p - 1][i - lat][j]) , max(r[p - 1][i][j - lat] , r[p - 1][i][j]));
}
}
int l , c , lat;
int main()
{
cin >> n >> q;
for(int i = 1; i <= n; ++i)
for(int j =1; j <= n; ++j)
cin >> r[0][i][j];
construire();
creare();
for(int i = 1; i <= q; ++i)
{
cin >> l >> c >> lat;
cout << maxim(l , c , lat) << "\n";
}
return 0;
}