Pagini recente » Cod sursa (job #3239354) | Cod sursa (job #824968) | Cod sursa (job #1946964) | Cod sursa (job #1573261) | Cod sursa (job #3261940)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
vector<vector<vector<int>>> r;
vector<int> E;
int n, m, x, y, z;
void precalc()
{
for(int p=1; (1<<p) < 10; p++)
for(int i=1; i + (1 << (p)) <= n + 1; i++)
for(int j=1; j + (1 << (p)) <= n + 1; j++)
{
int inou = i + (1 << (p-1));
int jnou = j + (1 << (p-1));
r[p][i][j] = r[p-1][i][j];
r[p][i][j] = max(r[p][i][j], r[p-1][inou][j]);
r[p][i][j] = max(r[p][i][j], r[p-1][i][jnou]);
r[p][i][j] = max(r[p][i][j], r[p-1][inou][jnou]);
}
for(int i=2; i<=10; i++)
E[i] = E[i / 2] + 1;
}
int main()
{
cin >> n >> m;
r.assign(10, vector<vector<int>>(n+1, vector<int>(n+1, 0)));
E.resize(10);
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
cin >> r[0][i][j];
precalc();
while(m--)
{
cin >> x >> y >> z;
int k = E[z];
int len = (1 << k);
int inou = x + z - len;
int jnou = y + z - len;
cout << max(max(r[k][x][y], r[k][x][jnou]), max(r[k][inou][y], r[k][inou][jnou])) << '\n';
}
return 0;
}