Pagini recente » Cod sursa (job #846840) | Statistici Caluianu Bianca (caluianubianca) | Cod sursa (job #703921) | Istoria paginii runda/simulare.oji | Cod sursa (job #1514668)
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n , m , x1 , y1 , x2 , y2 , d , t1, t2;
int mat[505][505] , r[505][505][25] , lg[505];
int main() {
f >> n >> m;
for(int i = 1 ; i <= n; ++i) {
for(int j = 1 ; j <= n ; ++j) {
f >> mat[i][j];
}
}
for(int i = 1 ; i <= n ; ++i) {
for(int j = 1 ; j <= n ; ++j) {
r[i][j][0] = mat[i][j];
for(int k = 1 ; (1 << k) <= min(i , j) ; ++k) {
t1 = max(r[i - (1 << (k - 1))][j - (1 << (k - 1))][k - 1] , r[i][j][k - 1]);
t2 = max(r[i - (1 << (k - 1))][j][k - 1] , r[i][j - (1 << (k - 1))][k - 1]);
r[i][j][k] = max(t1 , t2);
}
}
}
for(int i = 1 ; i <= n ; ++i) {
int aux = 1;
while((1 << aux) <= i) {
++aux;
}
lg[i] = aux - 1;
}
for(int i = 1 ; i <= m ; ++i) {
f >> x1 >> y1 >> d;
x2 = x1 + d - 1;
y2 = y1 + d - 1;
int aux = lg[d];
t1 = max(r[x2][y2][aux] , r[x1 + (1 << aux) - 1][y1 + (1 << aux) - 1][aux]);
t2 = max(r[x1 + (1 << aux) - 1][y2][aux] , r[x2][y1 + (1 << aux) - 1][aux]);
g << max(t1 , t2) << '\n';
}
return 0;
}