Pagini recente » Cod sursa (job #694569) | Cod sursa (job #2847968) | Cod sursa (job #2074217) | Cod sursa (job #844536) | Cod sursa (job #349364)
Cod sursa(job #349364)
#include <fstream>
#include <algorithm>
using namespace std;
#define MAX_N 505
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
int N, M;
int A[MAX_N][MAX_N], Rmq[10][MAX_N][MAX_N], L[MAX_N];
inline int Max(const int &A, const int &B, const int &C, const int &D)
{
return max(max(max(A, B), C), D);
}
void citire()
{
fin >> N >> M;
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= N; ++j)
{
fin >> A[i][j];
Rmq[0][i][j] = A[i][j];
}
}
void solve()
{
int a, b, k;
fin >> a >> b >> k;
int l = L[k];
int sh = k - (1 << l);
fout << Max(Rmq[l][a][b], Rmq[l][a+sh][b], Rmq[l][a][b+sh], Rmq[l][a+sh][b+sh]) << "\n";
}
void pre()
{
for(int i = 2; i <= N; ++i)
L[i] = L[i >> 1] + 1;
for(int k = 1; (1 << k) <= N; ++k)
for(int i = 1; i <= N - (1 << k) + 1; ++i)
for(int j = 1; j <= N - (1 << k) + 1; ++j)
{
int l = 1 << (k - 1);
Rmq[k][i][j] = Max(Rmq[k-1][i][j], Rmq[k-1][i+l][j], Rmq[k-1][i][j+l], Rmq[k-1][i+l][j+l]);
}
}
int main()
{
citire();
pre();
while(M--)
solve();
}