Pagini recente » implica-te/arhiva-educationala/membri-emeritus | Cod sursa (job #613017) | Cod sursa (job #623245) | Cod sursa (job #793236) | Cod sursa (job #779363)
Cod sursa(job #779363)
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
#define nmax 510
int RMQ[nmax][nmax][11], AA[nmax][nmax], N, M, A, B, C, P;
int max(int a, int b, int c, int d)
{
if(b > a) a = b;
if(d > c) c = d;
if(a > c) return a;
else return c;
}
void Compute()
{
int i, j, k;
for(i = 1; i <= N; i++)
for(j = 1; j <= N; j++)
RMQ[i][j][0] = AA[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 aux = (1 << (k - 1));
RMQ[i][j][k] = max(RMQ[i][j][k - 1], RMQ[i + aux][j][k - 1], RMQ[i][j + aux][k - 1], RMQ[i + aux][j + aux][k - 1]);
}
}
void Solve()
{
P = (int) log2(C);
printf("%i\n", max(RMQ[A][B][P], RMQ[A][B + C - (1 << P)][P], RMQ[A + C - (1 << P)][B][P], RMQ[A + C - (1 << P)][B + C - (1 << P)][P]));
}
int main()
{
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
int i, j;
scanf("%i %i", &N, &M);
for(i = 1; i <= N; i++)
for(j = 1; j <= N; j++)
scanf("%i", &AA[i][j]);
Compute();
for(; M; M --)
{
scanf("%i %i %i", &A, &B, &C);
Solve();
}
scanf("%i", &i);
return 0;
}