Pagini recente » Cod sursa (job #95157) | Cod sursa (job #1793306) | Cod sursa (job #398652) | Cod sursa (job #2797876) | Cod sursa (job #2628217)
#include <bits/stdc++.h>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
vector<vector<vector<int>>> v;
int n, m;
int main()
{
f >> n >> m;
v.resize(1 + log2(n));
v[0].resize(n, vector<int>(n));
for (auto &i : v[0])
for (auto &j : i)
f >> j;
for (int k = 1; k < (int)v.size(); ++k)
{
int dim = (1 << k), bd = (1 << (k - 1)), req = n - dim + 1;
v[k].resize(req, vector<int>(req));
for (int i = 0; i < req; ++i)
for (int j = 0; j < req; ++j)
v[k][i][j] = max(max(v[k - 1][i][j], v[k - 1][i][j + bd]), max(v[k - 1][i + bd][j], v[k - 1][i + bd][j + bd]));
}
for (int x, y, k; m; m--)
{
f >> x >> y >> k;
int ax = log2(k);
--x;
--y;
if (__builtin_popcount(k) == 1)
g << v[ax][x][y] << '\n';
else
g << max(max(v[ax][x][y], v[ax][x][y + k - (1 << ax)]), max(v[ax][x + k - (1 << ax)][y], v[ax][x + k - (1 << ax)][y + k - (1 << ax)])) << '\n';
}
return 0;
}