Pagini recente » Cod sursa (job #314594) | Cod sursa (job #313887) | Cod sursa (job #68855) | Cod sursa (job #778117) | Cod sursa (job #250438)
Cod sursa(job #250438)
//cu masiv si RMQ
#include<stdio.h>
#define NM 256+513
int b[NM][NM][10];
int main(){
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
int n,m,i,j,k,a[NM][NM],l,c,lat,pmax,p,x,t;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j){
scanf("%d",&a[i][j]);
b[0][i][j]=a[i][j];
}
k=0;p=1;
while(p<n) k++,p*=2;
x=k;p=1;
for(k=1;k<=x;++k){
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
/*if(i+p<=n&&j+p<=n)*/{
pmax=b[k-1][i][j];
if(pmax<b[k-1][i+p][j+p]) pmax=b[k-1][i+p][j+p];
if(pmax<b[k-1][i+p][j]) pmax=b[k-1][i+p][j];
if(pmax<b[k-1][i][j+p]) pmax=b[k-1][i][j+p];
b[k][i][j]=pmax;
}
p*=2;
}
for(t=0;t<m;++t){
scanf("%d%d%d",&l,&c,&lat);
p=1;k=0;
while(p<lat) k++,p*=2;
if(p>lat) p/=2,k--;
pmax=b[k][l][c];
if(pmax<b[k][l][c+lat-p]) pmax=b[k][l][c+lat-p];
if(pmax<b[k][l+lat-p][c]) pmax=b[k][l+lat-p][c];
if(pmax<b[k][l+lat-p][c+lat-p]) pmax=b[k][l+lat-p][c+lat-p];
printf("%d\n",pmax);
}
return 0;
}