Pagini recente » Cod sursa (job #1523299) | Cod sursa (job #1090030) | Cod sursa (job #2236463) | Cod sursa (job #2527546) | Cod sursa (job #1832633)
#include <cstdio>
#include <algorithm>
#define NMax 500
#define Log 9
using namespace std;
int rmq[Log+1][NMax+1][NMax+1];
int v[NMax+1][NMax+1];
int P[NMax+1];
int N;
void Build()
{
int i,j,k;
for(i = 1; i <= N; ++i)
for(j = 1; j <= N; ++j) rmq[0][i][j] = v[i][j];
for(k = 1; (1<<k) <= N; ++k)
for(i = 1; i <= N-(1<<k)+1; ++i)
for(j = 1; j <= N-(1<<k)+1; ++j)
{
rmq[k][i][j] = rmq[k-1][i][j];
rmq[k][i][j] = max( rmq[k][i][j], rmq[k-1][i+(1<<k-1)][j] );
rmq[k][i][j] = max( rmq[k][i][j], rmq[k-1][i][j+(1<<k-1)] );
rmq[k][i][j] = max( rmq[k][i][j], rmq[k-1][i+(1<<k-1)][j+(1<<k-1)] );
}
for(i = 2; i <= NMax; ++i) P[i] = P[i/2] + 1;
}
int main(){
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
int i,j,k,t,res,M;
scanf("%d %d",&N,&M);
for(i = 1; i <= N; ++i)
for(j = 1; j <= N; ++j) scanf("%d",&v[i][j]);
Build();
while(M--)
{
scanf("%d %d %d",&i,&j,&k);
t = P[k];
res = rmq[t][i][j];
res = max( res, rmq[t][i+k-(1<<t)][j] );
res = max( res, rmq[t][i][j+k-(1<<t)] );
res = max( res, rmq[t][i+k-(1<<t)][j+k-(1<<t)] );
printf("%d\n",res);
}
return 0;
}