Pagini recente » Cod sursa (job #188898) | Cod sursa (job #188216) | Cod sursa (job #417917) | Cod sursa (job #2300843) | Cod sursa (job #2275381)
#include <bits/stdc++.h>
using namespace std;
const int NMAX=5e2+5;
int N, M, i, j, k, X, Y, L;
int Lg, p2, Left, Right;
int RMQ[31][NMAX][NMAX];
int log2 (int N)
{
int putere=1;
int exponent=0;
while(putere<N)
{
putere*=2;
exponent++;
}
if(putere>N)
{
putere/=2;
exponent--;
}
return exponent;
}
int main()
{
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", &RMQ[0][i][j]);
for(i=1; i<=log2(N); i++)
for(j=1; j<=(N-(1<<i)+1); j++)
for(k=1; k<=(N-(1<<i)+1); k++)
RMQ[i][j][k]=max(RMQ[i-1][j][k], max(RMQ[i-1][j][k+(1<<(i-1))], max(RMQ[i-1][j+(1<<(i-1))][k], RMQ[i-1][j+(1<<(i-1))][k+(1<<(i-1))])));
for(i=1; i<=M; i++)
{
scanf("%d%d%d", &X, &Y, &L);
Lg=log2(L);
p2=(1<<Lg);
Left=X+L-1;
Right=Y+L-1;
printf("%d\n", max(RMQ[Lg][X][Y], max(RMQ[Lg][X][Right-p2+1], max(RMQ[Lg][Left-p2+1][Y], RMQ[Lg][Left-p2+1][Right-p2+1]))));
}
return 0;
}