Pagini recente » Cod sursa (job #2348299) | Cod sursa (job #1916909) | Cod sursa (job #2095642) | Cod sursa (job #2495859) | Cod sursa (job #3330585)
#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()
{
cin >> 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))]);
}
}
}
cout << 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 minn = inf;
minn = min(m[k - 1][x][y], m[k - 1][x][y+ (1 << k)]);
minn = min(minn, m[k - 1][xi - (1 << k)+1][y]);
minn = min(minn, m[k - 1][xi - (1 << k)+1][yi - (1 << k)-1]);
fout << minn << '\n';
}
return 0;
}