Pagini recente » Cod sursa (job #1472889) | Cod sursa (job #2297681) | Cod sursa (job #1796402) | Cod sursa (job #566680) | Cod sursa (job #1666255)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
const int N_max = 505;
const int Lg = 10;
int lg[N_max];
int rmq[N_max][N_max][Lg]; // rmq[i][j][k] = VALOAREA MAXIMA DIN PATRATUL DE LUNGIME 2^k CU COLTUL DREAPTA JOS (i, j)
int N, Q;
int maxim(int x, int y)
{
if(x > y) return x;
else
return y;
}
void read()
{
int i, j;
in >> N >> Q;
for(i = 1; i <= N; i++)
for(j = 1; j <= N; j++) in >> rmq[i][j][0];
}
void RMQ()
{
int i, j, k, p;
for(i = 1; i <= N; i++)
for(j = 1; j <= N; j++)
for(k = 1; (1 << k) <= N; k++)
{
p = 1 << (k - 1);
rmq[i][j][k] = maxim( maxim ( maxim ( rmq[i][j][k - 1], rmq[i][maxim(0, j - p)][k - 1] ), rmq[maxim(0, i - p)][j][k - 1]), rmq[maxim(0, i - p)][maxim(0, j - p)][k - 1]);
}
}
void write()
{
int i, j, k, q, p, ans;
lg[1] = 0;
for(i = 2; i <= N; i++) lg[i] = lg[i/2] + 1;
for(q = 1; q <= Q; q++)
{
in >> i >> j >> k;
int I = i + k - 1;
int J = j + k - 1;
p = lg[k];
ans = maxim( maxim( maxim(rmq[I][J][p], rmq[I][J - k + (1 << p)][p]), rmq[I - k + (1 << p)][J][p]), rmq[I - k + (1 << p)][J - k + (1 << p)][p]);
out << ans << '\n';
}
}
int main()
{
read();
RMQ();
write();
return 0;
}