Pagini recente » Cod sursa (job #2150027) | Cod sursa (job #544622) | Cod sursa (job #1441447) | Cod sursa (job #2749202) | Cod sursa (job #2773226)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("plantatie.in");
ofstream g ("plantatie.out");
constexpr int NMAX = 501;
constexpr int LGMAX = 11;
int N, M;
int RMQ[LGMAX][NMAX][NMAX];
int Log[NMAX];
void Read () {
f >> N >> M;
for (int i = 1; i <= N; ++ i )
for (int j = 1; j <= N; ++ j )
f >> RMQ[0][i][j];
}
void Do_RMQ () {
for (int lg = 2; lg <= N; ++ lg )
Log[lg] = Log[lg/2] + 1;
for (int lg = 1; lg <= Log[N]; ++ lg )
for (int i = 1; i <= N - (1<<lg) + 1; ++ i )
for (int j = 1; j <= N - (1<<lg) + 1; ++ j )
RMQ[lg][i][j] = max(max(RMQ[lg-1][i][j], RMQ[lg-1][i+(1<<(lg-1))][j+(1<<(lg-1))]),
max(RMQ[lg-1][i+(1<<(lg-1))][j], RMQ[lg-1][i][j+(1<<(lg-1))]));
}
int Query (int i, int j, int k) {
int L = Log[k];
int IMax = i + k - 1, JMax = j + k - 1;
return max(max(RMQ[L][i][j], RMQ[L][IMax-(1<<L)+1][JMax-(1<<L)+1]),
max(RMQ[L][IMax-(1<<L)+1][j], RMQ[L][i][JMax-(1<<L)+1]));
}
void Solve () {
for (; M; -- M ) {
int i, j, k;
f >> i >> j >> k;
g << Query(i, j, k) << '\n';
}
}
int main () {
Read();
Do_RMQ();
Solve();
return 0;
}