Pagini recente » Cod sursa (job #2002238) | Cod sursa (job #1734053) | Cod sursa (job #201033)
Cod sursa(job #201033)
#include <stdio.h>
#define N 503
long long a[N][N][10],log[N],n,m;
inline long long max(long long x,long long y){
if(x>y) return x;
return y;
}
void logaritm(){
int x=0;
for(int i=0;i<=n;i++)
if((1<<x)>i)
log[i]=x-1;
else log[i]=x++;
}
void rmq(){
int i,j,k;
for(i=n;i>=1;i--)
for(j=n;j>=1;j--)
for(k=1;i+(1<<k)<=n+1 && j+(1<<k)<=n+1;k++)
a[i][j][k]=max(max(a[i][j][k-1],a[i+(1<<(k-1))][j][k-1]),max(a[i][j+(1<<(k-1))][k-1],a[i+(1<<(k-1))][j+(1<<(k-1))][k-1]));
}
int main(){
int i,j,l,k,t;
long long sol;
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("%lld",&a[i][j][0]);
rmq();logaritm();
for(t=1;t<=m;t++){
scanf("%d%d%d",&i,&j,&k);
l=log[k];
sol=max(max(a[i][j][l],a[k-(1<<l)+i][j][l]),max(a[i][j+k-(1<<l)][l],a[i+k-(1<<l)][j+k-(1<<l)][l]));
printf("%lld\n",sol);
}
return 0;
}