Cod sursa(job #215400)

Utilizator marinMari n marin Data 18 octombrie 2008 16:17:21
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#define DIM 502


int n,m,i1,i2,j1,j2,lat;
int A[DIM][DIM][10];

int max(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/2;
	j2=j1+p/2;
        A[i1][j1][k] = max(max(A[i1][j1][k-1],A[i2][j1][k-1]),max(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*=2);
    p/=2;k--;
    i2 = i1+lat-p;
    j2 = j1+lat-p;
    fprintf(g, "%d\n", max(max(A[i1][j1][k],A[i1][j2][k]),max(A[i2][j1][k],A[i2][j2][k])));
  }
  return 0;

}