Pagini recente » Cod sursa (job #434671) | Cod sursa (job #2927030) | Cod sursa (job #1254878) | Cod sursa (job #2804188) | Cod sursa (job #2917805)
#include <fstream>
#include <initializer_list>
using namespace std;
constexpr inline int lg(int n)
{
return 31 - __builtin_clz(n);
}
template<typename _Tp>
constexpr _Tp max(initializer_list<_Tp> a_args)
{
_Tp r = *a_args.begin();
for(auto it = a_args.begin() + 1; it != a_args.end(); it++)
r = max(r, *it);
return r;
}
const int NMAX = 500, MMAX = 75000;
int n, m, x, y, k;
int rmq[lg(NMAX) + 1][NMAX][NMAX];
int main()
{
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
cin >> n >> m;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
cin >> rmq[0][i][j];
for(int h = 1; (1 << h) <= n; h++)
for(int i = 0; i + (1 << h) - 1 < n; i++)
for(int j = 0; j + (1 << h) - 1 < n; j++)
rmq[h][i][j] = max({rmq[h - 1][i][j],
rmq[h - 1][i + (1 << (h - 1))][j],
rmq[h - 1][i][j + (1 << (h - 1))],
rmq[h - 1][i + (1 << (h - 1))][j + (1 << (h - 1))]});
for(int i = 0; i < m; i++)
{
cin >> x >> y >> k;
x--; y--;
int lgc = lg(k);
cout << max({rmq[lgc][x][y],
rmq[lgc][x + k - (1 << lgc)][y],
rmq[lgc][x][y + k - (1 << lgc)],
rmq[lgc][x + k - (1 << lgc)][y + k - (1 << lgc)]}) << '\n';
}
}