Pagini recente » Cod sursa (job #2129793) | Cod sursa (job #1916982) | Cod sursa (job #1218752) | Cod sursa (job #987879) | Cod sursa (job #3330644)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
// #define fin cin
// #define fout cout
vector<vector<int>> v;
vector<int> lg;
vector<vector<vector<int>>> m;
int n, x, y, z, q, k;
const int inf = 1 << 30;
int main()
{
fin >> n >> q;
v.resize(n + 1, vector<int>(n + 1));
lg.resize(n + 1);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
fin >> v[i][j];
lg[1] = 0;
for (int i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
m.resize(lg[n] + 1, vector<vector<int>>(n + 1, vector<int>(n + 1)));
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
m[0][i][j] = v[i][j];
for (int k = 1; (1 << k) <= n; k++)
{
for (int i = 1; i + (1 << k) <= n + 1; i++)
{
for (int j = 1; j + (1 << k) <= n + 1; j++)
{
m[k][i][j] = max(m[k - 1][i][j], m[k - 1][i][j + (1 << (k - 1))]);
m[k][i][j] = max(m[k][i][j], m[k - 1][i + (1 << (k - 1))][j]);
m[k][i][j] = max(m[k][i][j], m[k - 1][i + (1 << (k - 1))][j + (1 << (k - 1))]);
}
}
}
for (int i = 1; i <= q; i++)
{
fin >> x >> y >> z;
int xi = x + z - 1;
int yi = y + z - 1;
k = lg[z];
int ans = -inf;
ans = max(m[k][x][y], m[k][x][yi - (1 << k) + 1]);
ans = max(ans, m[k][xi - (1 << k) + 1][y]);
ans = max(ans, m[k][xi - (1 << k) + 1][yi - (1 << k) + 1]);
fout << ans << '\n';
}
return 0;
}