Pagini recente » Cod sursa (job #487978) | Cod sursa (job #595628) | Cod sursa (job #637946) | Cod sursa (job #490702) | Cod sursa (job #2790759)
#include <stdio.h>
#define DIM 502
int n,m,i1,i2,j1,j2,lat;
int A[DIM][DIM][10];
///A[i][j][k] = maximul dintr-un patrat de latura 2 la k care are coltul stanga sus in i,j
int maxim(int a, int b){
if (a>b)
return a;
return b;
}
int main(){
FILE *f = fopen("plantatie.in","r");
FILE *g = fopen("plantatie.out","w");
fscanf(f, "%d %d", &n, &m);
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
fscanf(f, "%d", &A[i][j][0]);
}
}
for (int k=1,p=2; p<=n; k++,p*=2){
for (int i1=1;i1<=n-p+1;i1++){
for (int j1=1;j1<=n-p+1;j1++){
i2=i1+(p>>1);
j2=j1+(p>>1);
A[i1][j1][k] = maxim(maxim(A[i1][j1][k-1],A[i2][j1][k-1]),maxim(A[i1][j2][k-1],A[i2][j2][k-1]));
}
}
}
for (;m;m--){
fscanf(f, "%d %d %d", &i1, &j1, &lat);
int k,p;
for (k=0,p=1;p<=lat;k++,p<<=1);
p>>=1;k--;
i2 = i1+lat-p;
j2 = j1+lat-p;
fprintf(g, "%d\n", maxim(maxim(A[i1][j1][k],A[i1][j2][k]),maxim(A[i2][j1][k],A[i2][j2][k])));
}
return 0;
}