Cod sursa(job #2156546)

Utilizator ovidius11Stiriu Ovidius ovidius11 Data 8 martie 2018 20:01:52
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<cstdio>
int v[10][505][505];
int maxim(int a,int b,int c,int d){
int maxi=a;
if (maxi<b)
maxi=b;
if (maxi<c)
maxi=c;
if (maxi<d)
maxi=d;
return maxi;}
int main(){
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
int n,m,i,j,e,x,y,k,x1,y1,p,cnt;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&v[0][i][j]);
for(i=1;(1<<i)<=n;i++)
for(j=1;j<=n-(1<<i)+1;j++)
for(e=1;e<=n-(1<<i)+1;e++)
v[i][j][e]=maxim(v[i-1][j][e],v[i-1][j][e+(1<<(i-1))],v[i-1][j+(1<<(i-1))][e],v[i-1][j+(1<<(i-1))][e+(1<<(i-1))]);
for(i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&k);
x1=x+k-1;
y1=y+k-1;
p=1;
cnt=0;
while(p<=k){
p=p*2;
cnt++;}
p=p/2;
cnt--;
printf("%d\n",maxim(v[cnt][x][y],v[cnt][x][y1-p+1],v[cnt][x1-p+1][y],v[cnt][x1-p+1][y1-p+1]));}
return 0;}