Pagini recente » Cod sursa (job #1077765) | Cod sursa (job #2140410) | Cod sursa (job #3122319) | Cod sursa (job #1512432) | Cod sursa (job #970619)
Cod sursa(job #970619)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("plantatie.in");
ofstream out ("plantatie.out");
const int MAXN = 510;
int N;
int A[MAXN][MAXN], Log[MAXN];
int RMQ[9][MAXN][MAXN];
inline int max (const int &A, const int &B, const int &C, const int &D)
{
int X = max (A, B);
int Y = max (C, D);
return max (X, Y);
}
void Build_Log ()
{
int i;
for (i = 2; i < MAXN; i ++)
Log[i] = Log[i / 2] + 1;
}
void Build_RMQ ()
{
int i, j, k, a, b, c, d;
for (i = 1; i <= N; i ++)
for (j = 1; j <= N; j ++)
RMQ[0][i][j] = A[i][j];
for (k = 1; k <= Log[N]; k ++)
for (i = 1; i <= N; i ++)
for (j = 1; j <= N; j ++){
a = RMQ[k - 1][i][j];
b = RMQ[k - 1][i + (1 << (k - 1))][j];
c = RMQ[k - 1][i][j + (1 << (k - 1))];
d = RMQ[k - 1][i + (1 << (k - 1))][j + (1 << (k - 1))];
RMQ[k][i][j] = max (a, b, c, d);
}
}
inline int Solve (int i, int j, int k)
{
int log = Log[k];
return max (RMQ[log][i][j], RMQ[log][i + k - (1 << log)][j], RMQ[log][i][j + k - (1 << log)], RMQ[log][i + k - (1 << log)][j + k - (1 << log)]);
}
int main()
{
int Q, i, j, k;
in >> N >> Q;
for (i = 1; i <= N; i ++)
for (j = 1; j <= N; j ++)
in >> A[i][j];
Build_Log ();
Build_RMQ ();
while (Q --){
in >> i >> j >> k;
out << Solve (i, j, k) << "\n";
}
return 0;
}