Pagini recente » Istoria paginii runda/simulare_clasa_9_oji | Cod sursa (job #695087) | Istoria paginii preoni-2007/runda-finala/11-12 | Clasament mpractice1 | Cod sursa (job #204489)
Cod sursa(job #204489)
#include<stdio.h>
#define N 505
#define L 10
int m,n,a[N][N][L],v[N][N];
inline int maxim(int a1,int a2,int a3,int a4){
int m=a1;
if(a2>m)
m=a2;
if(a3>m)
m=a3;
if(a4>m)
m=a4;
return m;
}
void init(){
int i,j,k,p;
for(i=n ; i ;--i)
for(j=n ; j ; --j){
a[i][j][0]=v[i][j];
for(k=1 ; i+(1<<k)-1<=n && j+(1<<k)-1<=n ; ++k){
p=1<<(k-1);
a[i][j][k]=maxim(a[i][j][k-1],a[i][j+p][k-1],a[i+p][j][k-1],a[i+p][j+p][k-1]);
}
}
}
inline int doi(int k){
int p=1,nr=0;
while(p<=k){
p<<=1;
++nr;
}
return nr-1;
}
inline int rez(int i,int j,int k){
int p=doi(k),kk;
kk=1<<p;
return maxim(a[i][j][p],a[i][j+k-kk][p],a[i+k-kk][j][p],a[i+k-kk][j+k-kk][p]);
}
void calcul(){
int i,j,k;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
scanf("%d",&v[i][j]);
init();
while(m--){
scanf("%d%d%d",&i,&j,&k);
printf("%d\n",rez(i,j,k));
}
}
int main(){
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
calcul();
return 0;
}