Pagini recente » Cod sursa (job #736886) | Cod sursa (job #1030970) | Cod sursa (job #1966273) | Cod sursa (job #738435) | Cod sursa (job #2755088)
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int N = 501, L = 9;
int r[L][N][N], logd[N];
int max(int a, int b, int c, int d)
{
return max(max(a, b), max(c, d));
}
int main()
{
int n, q;
fin >> n >> q;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {int a; fin >> a; r[0][i][j] = a;}
//precalculare
//r[l][i][j] = max submatricei patrate de lat 2^l cu coltul dr. jos (i, j)
for (int l = 1; (1 << l) <= n; l++)
{
for (int i = (1 << l); i <= n; i++)
{
for (int j = (1 << l); j <= n; j++)
{
int lat = (1 << (l - 1));
r[l][i][j] = max(r[l - 1][i - lat][j - lat], r[l - 1][i - lat][j],
r[l - 1][i][j - lat], r[l - 1][i][j]);
}
}
}
//precalculez vectorul logd cu logd[i] = cel mai mare e cu 2^e <= i
logd[1] = 0;
for (int i = 2; i <= n; i++)
{
logd[i] = 1 + logd[i / 2];
}
for (int i = 0; i < q; i++)
{
int l, c, lat;
fin >> l >> c >> lat;
//mut (l,c) in coltul dreapta jos al submatricei
l += lat - 1;
c += lat - 1;
int e = logd[lat];
lat -= (1 << e);
fout << max(r[e][l - lat][c - lat], r[e][l - lat][c],
r[e][l][c - lat], r[e][l][c]) << "\n";
}
return 0;
}