Pagini recente » Cod sursa (job #1770218) | Cod sursa (job #11428) | Cod sursa (job #2461755) | Cod sursa (job #412780) | Cod sursa (job #2745582)
#include <fstream>
using namespace std;
const int N = 501, L = 9;
int r[L][N][N], log2[N];
int max(int a, int b, int c, int d)
{
return max(max(a, b), max(c, d));
}
int main()
{
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int n, q;
in >> n >> q;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
int a;
in >> a;
r[0][i][j] = a;
}
}
//precalculez tabloutl tridimensional:
//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 log2 cu log2[i] = cel mai mare e cu 2^e <= i
log2[1] = 0;
for (int i = 2; i <= n; i++)
{
log2[i] = 1 + log2[i/2];
}
for (int i = 0; i < q; i++)
{
int l, c, lat;
in >> l >> c >> lat;
//mut (l,c) in coltul dreapta jos al submatricei
l += lat - 1;
c += lat - 1;
int e = log2[lat];
lat -= (1 << e);
out << max(r[e][l - lat][c - lat], r[e][l - lat][c],
r[e][l][c - lat], r[e][l][c]) << "\n";
}
in.close();
out.close();
return 0;
}