Pagini recente » Cod sursa (job #145536) | Cod sursa (job #1544175) | Cod sursa (job #2352076) | Cod sursa (job #2954848) | Cod sursa (job #1762468)
#include <stdio.h>
#include <stdlib.h>
int r[501][501][20],log[501];
int max(int a, int b, int c, int d){
int maxim=a;
if(b>maxim)
maxim=b;
if(c>maxim)
maxim=c;
if(d>maxim)
maxim=d;
return maxim;
}
int main(){
FILE *fin=fopen("plantatie.in","r");
FILE *fout=fopen("plantatie.out","w");
int n,m,i,j,k,a,b,rez,l;
fscanf(fin,"%d%d",&n,&m);
for(i=1; i<=n; i++)
for(j=1; j<=n; j++){
fscanf(fin,"%d",&r[i][j][0]);
for(k=1; (1<<k)<=i && (1<<k)<=j; k++)
r[i][j][k]=max(r[i][j][k-1], r[i][j-(1<<(k-1))][k-1],
r[i-(1<<(k-1))][j][k-1], r[i-(1<<(k-1))][j-(1<<(k-1))][k-1]);
}
for(i=2; i<=n; i++)
log[i]=1+log[i/2];
for(i=0; i<m; i++){
fscanf(fin,"%d%d%d",&a,&b,&k);
l=log[k];
rez=max(r[a+(1<<l)-1][b+(1<<l)-1][l], r[a+(1<<l)-1][b+k-1][l],
r[a+k-1][b+k-1][l], r[a+k-1][b+(1<<l)-1][l]);
fprintf(fout,"%d\n",rez);
}
fclose(fin);
fclose(fout);
return 0;
}