Pagini recente » Cod sursa (job #1857394) | Cod sursa (job #666827) | Cod sursa (job #2880637) | Cod sursa (job #1812916) | Cod sursa (job #448107)
Cod sursa(job #448107)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 510;
const int LMAX = 10;
int N, M;
int lg[NMAX];
int R[LMAX][NMAX][NMAX];
void write(int k)
{
for(int i = 1 ; i <= N ; i++)
{
for(int j = 1 ; j <= N ; j++)
printf("%d ", R[k][i][j]);
printf("\n");
}
printf("\n\n\n");
}
inline int max(int a, int b, int c , int d)
{
if(a >= b && a >= c && a >= d)
return a;
if(b >= a && b >= c && b >= d)
return b;
if(c >= a && c >= b && c >= d)
return c;
return d;
}
void citire()
{
scanf("%d%d", &N, &M);
for(int i = 1 ; i <= N ; i++)
for(int j = 1 ; j <= N ; j++)
scanf("%d", &R[0][i][j]);
//write(0);
}
void log()
{
lg[1] = 0;
for(int i = 2 ; i <= N ; i++)
lg[i] = lg[i / 2] + 1;
}
void rmq()
{
for(int k = 1 ; (1<<k) <= N ; k++)
{
for(int i = 1 ; i + (1<<k) - 1 <= N ; i++)
for(int j = 1 ; j + (1<<k) - 1 <= N ; j++)
R[k][i][j] = max(R[k - 1][i][j], R[k - 1][i + (1<<(k - 1))][j], R[k - 1][i][j + (1<<(k - 1))], R[k - 1][i + (1<<(k - 1))][j + (1<<(k - 1))]);
//write(k);
}
}
void apeluri()
{
int x, y, z;
int p;
for(int i = 1 ; i <= M ; i++)
{
scanf("%d%d%d", &x, &y, &z);
p = lg[z];
printf("%d\n", max(R[p][x][y], R[p][x + z - (1<<p)][y], R[p][x][y + z - (1<<p)], R[p][x + z - (1<<p)][y + z - (1<<p)]));
}
}
int main()
{
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
citire();
log();
rmq();
apeluri();
return 0;
}