Pagini recente » Cod sursa (job #2778840) | Cod sursa (job #203072) | Cod sursa (job #1676768) | Monitorul de evaluare | Cod sursa (job #2751680)
#include <bits/stdc++.h>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int main(){
int N, M, r2d[50][50][12], p[50][50], log2[50];
int T;
f >> N >> T;
for (int i = 1; i <= N; ++i)
for (int j = 1; j <= N; ++j)
f >> p[i][j];
log2[0] = -1;
for (int i = 1; i <= N; ++i)
log2[i] = 1 + log2[i/2];
for(int i = 1; i <= N; ++i)
for (int j = 1; j <= N; ++j)
r2d[i][j][0] = p[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++)
r2d[i][j][k] = max(max(r2d[i + (1 << (k - 1))][j][k - 1], r2d[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]), max(r2d[i][j][k - 1], r2d[i][j + (1 << (k - 1))][k - 1]));
for(int i = 0; i < T; ++i) {
int x, y, k;
f >> x >> y >> k;
int pw = log2[k];
g << max(max(r2d[x][y][pw], r2d[x][y + k - (1 << pw)][pw]), max(r2d[x + k - (1 << pw)][y][pw], r2d[x + k - (1 << pw)][y + k - (1 << pw)][pw]));
g << "\n";
}
return 0;
}