Pagini recente » Cod sursa (job #2424661) | Cod sursa (job #2345577) | Cod sursa (job #528354) | Cod sursa (job #2960899) | Cod sursa (job #1977900)
#include <stdio.h>
#include <stdlib.h>
int logg[501], r[501][501][10];
int maxim(int a, int b){
if(a>b)
return a;
return b;
}
int intreb(int i, int j, int x){
int l=logg[x], i2=i+x-1, j2=j+x-1;
return maxim(maxim(r[i2][j2][l], r[i+(1<<l)-1][j2][l]), maxim(r[i2][j+(1<<l)-1][l], r[i+(1<<l)-1][j+(1<<l)-1][l]));
}
int main(){
FILE *fin, *fout;
int n, m, k, i, j, x, y;
fin=fopen("plantatie.in", "r");
fout=fopen("plantatie.out", "w");
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]);
printf("%d ", r[i][j][0]);
}
printf("\n");
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;(1<<k)<=i && (1<<k)<=j;k++)
r[i][j][k]=maxim(maxim(r[i][j][k-1], r[i-(1<<(k-1))][j][k-1]), maxim(r[i][j-(1<<(k-1))][k-1], r[i-(1<<(k-1))][j-(1<<(k-1))][k-1]));
logg[1]=0;
for(i=2;i<=500;i++)
logg[i]=1+logg[i/2];
for(i=0;i<m;i++){
fscanf(fin, "%d%d%d", &x, &y, &k);
fprintf(fout, "%d\n", intreb(x, y, k));
}
fclose(fin);
fclose(fout);
return 0;
}