Pagini recente » Cod sursa (job #3322449) | Cod sursa (job #1997695) | Monitorul de evaluare | Cod sursa (job #1268928) | Cod sursa (job #3327381)
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int Nmax = 505;
int rmq[Nmax][Nmax][10], log[Nmax];
int main()
{
int n, m, i, j, k;
fin >> n >> m;
for ( i = 1; i <= n; ++i )
for ( j = 1; j <= n; ++j )
fin >> rmq[i][j][0];
for ( i = 2; i <= n; ++i )
log[i] = log[i / 2] + 1;
for ( i = 1; i <= n; ++i )
for ( j = 1; j <= n; ++j )
for ( k = 1; k <= log[i] && k <= log[j]; ++k )
{
rmq[i][j][k] = max( rmq[i][j][k - 1], max( rmq[i - (1 << ( k - 1)) ][j][k - 1], max( rmq[i][j - (1 << ( k - 1)) ][k - 1] , rmq[i - (1 << ( k - 1))][j - (1 << ( k - 1))][k - 1] ) ) );
}
for ( i = 1; i <= m; ++i )
{
int x, y, k;
fin >> x >> y >> k;
///Convertim (x, y) in coord coltului dr jos, pt ca asa ne am definit rmq-ul
x = x + k - 1;
y = y + k - 1;
int l = log[k];
int sol = max( rmq[x][y][l], max(rmq[x - k + (1 << l)][y][l], max( rmq[x - k + (1 << l)][y - k + (1 << l)][l], rmq[x][y - k + (1 << l)][l] )));
fout << sol << '\n';
}
return 0;
}