Pagini recente » Cod sursa (job #1464602) | Cod sursa (job #550120) | Cod sursa (job #2846112) | Cod sursa (job #2109000) | Cod sursa (job #2901911)
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
#define MAXN 502
#define LOG 9
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int d[MAXN][MAXN][LOG];
int a[MAXN][MAXN], N, M;
int main()
{
int i, j, k;
fin >> N >> M;
for (i = 1; i <= N; ++i)
for (j = 1; j <= N; ++j)
{
fin >> a[i][j];
d[i][j][0] = a[i][j];
}
//d[i][j][k] = el maxim din submatricea care are colt stanga sus (i,j) si colt dreapta jos (i + 2^k - 1)(j + 2^k - 1)
for (k = 1; k < LOG; ++k)
for (i = 1; i + (1 << k) - 1 <= N; ++i)
for (j = 1; j + (1 << k) - 1 <= N; ++j)
{
d[i][j][k] = max({d[i][j][k - 1],d[i + (1 << k - 1)][j][k - 1],d[i][j + (1 << k - 1)][k - 1],d[i + (1 << k - 1)][j + (1 << k - 1)][k - 1]});
}
for (int p = 1; p <= M; ++p)
{
fin >> i >> j >> k;
int l = log2(k);
int i2 = i + k;
int j2 = j + k;
fout << max({d[i][j][l],d[i2 - (1 << l)][j][l],d[i][j2 - (1 << l)][l],d[i2 - (1 << l)][j2 - (1 << l)][l]}) <<'\n';
}
return 0;
}