Pagini recente » Cod sursa (job #369860) | Cod sursa (job #539235) | Cod sursa (job #2168789) | Cod sursa (job #2920304) | Cod sursa (job #2791141)
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
#define N_MAX 501
#define LOG 9
int a[N_MAX][N_MAX];
int Max[N_MAX][LOG][N_MAX];
int main()
{
int N, M, i, j, k, maxi, p, ant;
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(int k=1; (1<<k)<=N; k++)
for(i=1; i+(1<<k)-1<=N; i++)
for(j=1; j+(1<<k)-1<=N; j++)
{
maxi=-1;
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);
ant=k-(1<<p);
maxi=-1;
if(maxi<Max[i][j][p])
maxi=maxi<Max[i][j][p];
if(maxi<Max[i+ant][j][p])
maxi=Max[i+ant][j][p];
if(maxi<Max[i][j+ant][p])
maxi=Max[i][j+ant][p];
if(maxi<Max[i+ant][j+ant][p])
maxi=Max[i+ant][j+ant][p];
fout << maxi << '\n';
M--;
}
fin.close();
fout.close();
return 0;
}