Pagini recente » Cod sursa (job #1273871) | Cod sursa (job #3032264) | Cod sursa (job #1205189) | Cod sursa (job #1797326) | Cod sursa (job #595737)
Cod sursa(job #595737)
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAXN 500
#define MAXLGN 10
int main(){
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
int N, M, i, j, k, s, a, b;
static int P[MAXN][MAXN], RMQ[MAXLGN][MAXN][MAXN], lg[MAXN];
scanf("%d%d", &N, &M);
for(i=1; i<=N; i++)
for(j=1; j<=N; j++)
scanf("%d", &P[i][j]);
for(i=1; i<=N; i++)
for(j=1; j<=N; j++)
RMQ[0][i][j]=P[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++){
s=1<<(k-1);
RMQ[k][i][j]=max(max(RMQ[k-1][i][j], RMQ[k-1][i+s][j]), max(RMQ[k-1][i][j+s], RMQ[k-1][i+s][j+s]));
}
lg[1]=0;
for(i=2; i<=N; i++)
lg[i]=lg[i>>1]+1;
for(i=1; i<=M; i++){
scanf("%d%d%d", &a, &b, &k);
s=lg[k];
printf("%d\n", max(max(RMQ[s][a][b], RMQ[s][a+k-(1<<s)][b]), max(RMQ[s][a][b+k-(1<<s)], RMQ[s][a+k-(1<<s)][b+k-(1<<s)])));
}
return 0;
}