Pagini recente » Cod sursa (job #79173) | Cod sursa (job #389053) | Cod sursa (job #2135582) | Cod sursa (job #571977) | Cod sursa (job #3141055)
#include <fstream>
using namespace std;
ifstream cin ("plantatie.in");
ofstream cout ("plantatie.out");
int maxim[10][501][501];
int main ()
{
int lungime , intrebari;
cin >> lungime >> intrebari;
for (int linie = 1 ; linie <= lungime ; linie++)
for (int coloana = 1 ; coloana <= lungime ; coloana++)
cin >> maxim[0][linie][coloana];
for (int exponent = 1 ; (1 << exponent) <= lungime ; exponent++)
for (int linie = 1 ; linie + (1 << exponent) - 1 <= lungime ; linie++)
for (int coloana = 1 ; coloana + (1 << exponent) - 1 <= lungime ; coloana++)
maxim[exponent][linie][coloana] = max(maxim[exponent - 1][linie][coloana] , max(maxim[exponent - 1][linie + (1 << (exponent - 1))][coloana] ,
max(maxim[exponent - 1][linie][coloana + (1 << (exponent - 1))] , maxim[exponent - 1][linie + (1 << (exponent - 1))][coloana + (1 << (exponent - 1))])));
auto Adancime = [] (int numar) -> int {
int adancime = -1;
for (int bit = 0 ; (1 << bit) <= numar ; bit++)
adancime++;
return adancime;
};
for (int intrebare = 1 , linie , coloana , lungime_patrat ; intrebare <= intrebari ; intrebare++)
{
cin >> linie >> coloana >> lungime_patrat;
int exponent = Adancime(lungime_patrat);
cout << max(maxim[exponent][linie][coloana] , max(maxim[exponent][linie + lungime_patrat - (1 << exponent)][coloana] , max(maxim[exponent][linie][coloana + lungime_patrat - (1 << exponent)] ,
maxim[exponent][linie + lungime_patrat - (1 << exponent)][coloana + lungime_patrat - (1 << exponent)]))) << '\n';
}
cout.close(); cin.close();
return 0;
}