Pagini recente » Cod sursa (job #109559) | Cod sursa (job #817926) | Cod sursa (job #653851) | Cod sursa (job #724292) | Cod sursa (job #2278333)
#include <fstream>
using namespace std;
int const NM = 500;
int log [1 + NM] , r [10][1 + NM][1 + NM] , n , m;
ifstream f ("plantatie.in");
ofstream g ("plantatie.out");
int main()
{
f >> n >> m;
for(int i = 1 ; i <= n ; ++ i)
for(int j = 1 ; j <= n ; ++ j)
f >> r [0][i][j];
for(int i = 2 ; i <= n ; ++ i)
log [i] = 1 + log [i / 2];
for(int i = 1 ; i <= 1 + log [n] ; ++ i)
for(int j = 1 << i ; j <= n ; ++ j)
for(int k = 1 << i ; k <= n ; ++ k){
r [i][j][k] = max (r [i - 1][j - (1 << (i - 1))][k - (1 << (i - 1))] , r [i - 1][j][k]);
r [i][j][k] = max (r [i][j][k] , r [i - 1][j - (1 << (i - 1))][k]);
r [i][j][k] = max (r [i][j][k] , r [i - 1][j][k - (1 << (i - 1))]);
}
for(int i = 1 ; i <= m ; ++ i){
int a , b , c;
f >> a >> b >> c;
int l = (1 << log [c]) , ans , lg = log [c];
if (l == c)
ans = r [lg][a + c - 1][b + c - 1];
else
ans = max (r [lg][a + c - 1][b + c - 1] , max (r [lg][a + c - 1][b + l - 1] , max (r [lg][a + l - 1][b + c - 1] , r [lg][a + l - 1][b + l - 1])));
g << ans << '\n';
}
return 0;
}