Pagini recente » Cod sursa (job #364694) | Cod sursa (job #1832781) | Cod sursa (job #2961827) | Cod sursa (job #426962) | Cod sursa (job #3234646)
#include <fstream>
using namespace std;
const int N = 500;
const int L = 8;
int log_2[N+1], rmq[L+1][N+1][N+1];
int max(int a, int b, int c, int d)
{
return max(max(a, b), max(c, d));
}
void constructie_rmq(int n)
{
for (int e = 1; (1 << e) <= n; e++)
{
int p = 1 << (e - 1);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
rmq[e][i][j] = max(rmq[e-1][i-p][j-p], rmq[e-1][i-p][j], rmq[e-1][i][j-p],rmq[e-1][i][j]);
}
}
}
log_2[1] = 0;
for (int i = 2; i <= n; i++)
{
log_2[i] = 1 + log_2[i/2];
}
}
int maxim(int l, int c, int lat)
{
int e = log_2[lat];
int p = 1 << e;
return max(rmq[e][l-lat+p][c-lat+p], rmq[e][l-lat+p][c], rmq[e][l][c-lat+p], rmq[e][l][c]);
}
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++)
{
in >> rmq[0][i][j];
}
}
constructie_rmq(n);
for (int i = 0; i < q; i++)
{
int l, c, lat;
in >> l >> c >> lat;
out << maxim(l + lat - 1, c + lat - 1, lat) << "\n";
}
in.close();
out.close();
return 0;
}