Pagini recente » Cod sursa (job #272357) | Cod sursa (job #2180387) | Cod sursa (job #1853468) | Cod sursa (job #956809) | Cod sursa (job #590438)
Cod sursa(job #590438)
#include<fstream>
using namespace std;
const int maxn = 505;
int c[maxn][maxn][12], a[maxn][maxn];
int logarithm[maxn];
ofstream g("plantatie.out");
void calculateLogarithm(int n) {
logarithm[1] = 0;
int next = 2;
for (int i = 2; i <= n; i++) {
logarithm[i] = logarithm[i-1];
if (i == next) {
logarithm[i]++;
next = next*2;
}
}
}
void preprocessMatrix(int n) {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
c[i][j][0] = a[i][j];
for (int k = 1; (1<<k) <= n; k++) {
for (int i = 1; i + (1<<k) - 1 <= n; i++)
for (int j = 1; j + (1<<k) - 1 <= n; j++) {
int x = c[i][j][k-1];
int l = (1 << (k-1));
int y = c[i+l][j][k-1];
if (y > x)
x = y;
y = c[i][j+l][k-1];
if (y > x)
x = y;
y = c[i+l][j+l][k-1];
if (y > x)
x = y;
c[i][j][k] = x;
}
}
}
int main() {
ifstream f("plantatie.in");
int n, m;
f >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
f >> a[i][j];
preprocessMatrix(n);
calculateLogarithm(n);
int x1, y1, l;
for (int i = 1; i <= m; i++) {
f >> x1 >> y1 >> l;
int x2 = x1+l-1;
int y2 = y1+l-1;
int k = logarithm[l];
int maxim = c[x1][y1][k];
int secondMax = c[x2-(1<<k)+1][y1][k];
if (secondMax > maxim)
maxim = secondMax;
secondMax = c[x1][y2-(1<<k)+1][k];
if (secondMax > maxim)
maxim = secondMax;
secondMax = c[x2-(1<<k)+1][y2-(1<<k)+1][k];
if (secondMax > maxim)
maxim = secondMax;
g << maxim << '\n';
}
return 0;
}