Pagini recente » Cod sursa (job #3146234) | Cod sursa (job #135815) | Cod sursa (job #741717) | Cod sursa (job #835847) | Cod sursa (job #2791165)
#include <fstream>
#include <cmath>
using namespace std;
#define N_MAX 501
#define LOG_MAX 9
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int Max[N_MAX][N_MAX][LOG_MAX], i, j, k, p, N, M, a[N_MAX][N_MAX], cnt, diff;
int main()
{
fin>>N>>M;
for(i=1; i<=N; i++)
for(j=1; j<=N; j++)
{
fin>>a[i][j];
Max[i][j][0]=a[i][j];
}
for(k=1; (1<<k)<=N; k++)
for(i=1; i+(1<<k)-1<=N; i++)
for(j=1; j+(1<<k)-1<=N; j++)
{
int maxi=-1;
int p=(1<<k-1);
if(maxi<Max[i][j][k-1])
maxi=Max[i][j][k-1];
if(maxi<Max[i+p][j][k-1])
maxi=Max[i+p][j][k-1];
if(maxi<Max[i][j+p][k-1])
maxi=Max[i][j+p][k-1];
if(maxi<Max[i+p][j+p][k-1])
maxi=Max[i+p][j+p][k-1];
Max[i][j][k]=maxi;
}
while(M)
{
fin>>i>>j>>k;
p = log2(k);
diff = k - (1 << p);
int maxi=-1;
if(maxi<Max[i][j][p] )
maxi=Max[i][j][p];
if(maxi<Max[i+diff][j][p])
maxi=Max[i+diff][j][p];
if(maxi<Max[i][j+diff][p])
maxi=Max[i][j+diff][p];
if(maxi<Max[i+diff][j+diff][p])
maxi=Max[i+diff][j+diff][p];
fout << maxi << '\n';
M--;
}
return 0;
}