Pagini recente » Cod sursa (job #1197822) | Cod sursa (job #980327) | Borderou de evaluare (job #881010) | Borderou de evaluare (job #2048355) | Cod sursa (job #414308)
Cod sursa(job #414308)
#include<stdio.h>
using namespace std;
#define NMAX 505
#define MMAX 75005
int C[NMAX][NMAX][15], N, M;
int putere(int a)
{
int k = 0;
for(; 1<<(k + 1) <= a; ++k);
return k;
}
int max(int a, int b, int c, int d)
{
if(a > b); else a = b;
if(a > c); else a = c;
if(a > d); else a = d;
return a;
}
int main()
{ int i, j, t, lung, x, y, l, val;
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
scanf("%d %d", &N, &M);
for(i = 1; i <= N; i++)
for(j = 1; j <= N; j++)
{
scanf("%d", &C[i][j][0]);
}
lung = putere(N);
for(t = 1; t <= lung; t++)
{
val = 1<<(t-1);
for(i = 1; i <= N; i++)
for(j = 1; j <= N; j++)
if(i + (1<<t) -1 <= N && j + (1<<t) -1 <= N)
C[i][j][t] = max(C[i][j][t-1], C[i+val][j][t-1], C[i][j+val][t-1], C[i+val][j+val][t-1]);
}
int rez, put;
for(i = 1; i <= M; i++)
{
scanf("%d %d %d", &x, &y, &l);
put = putere(l); val = 1 << put;
rez = max(C[x][y][put], C[x - val + l][y][put], C[x][y - val + l][put], C[x - val + l][y - val + l][put]);
printf("%d\n", rez);
}
return 0;
}