Pagini recente » Cod sursa (job #2682168) | Cod sursa (job #1196268) | Cod sursa (job #2314994) | Cod sursa (job #2625558) | Cod sursa (job #2618939)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int log_table[501],a[501][501][10], i , j, n, m;
int main()
{
cin>>n>>m;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
cin>>a[i][j][0];
log_table[1] = 0;
for(int i = 2; i <= n; i++)
log_table[i] = log_table[i/2] + 1;
for(int putere = 1; putere <= log_table[n]; putere++) // incepem cu puterea 1 deoarece patrateputeree cu putere 2 puterea puterea 0 sunt insasi numereputeree
{
for(i = (1<<putere); i <= n; i++)
for(j = (1<<putere); j <= n; j++)
a[i][j][putere] = max({a[i][j][putere - 1], a[i - (1<<(putere - 1))][j][putere - 1], a[i - (1<<(putere - 1))][j - (1<<(putere - 1))][putere - 1], a[i][j - (1<<(putere - 1))][putere - 1]});
}
int l;
for(int nr = 1; nr <= m; nr++)
{
cin>>i>>j>>l;
i += l - 1;
j += l - 1;
int pow_max = log_table[l]; // la maxima a lui 2 mai mica sau egala cu lungimea laturii
cout<<max( { a[i][j][pow_max], a[i-l+(1<<pow_max)][j][pow_max], a[i][j-l+(1<<pow_max)][pow_max], a[i-l+(1<<pow_max)][j-l+(1<<pow_max)][pow_max] } )<<"\n";
}
return 0;
}